public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jesse Pollard <jesse@cats-chateau.net>
To: Krzysztof Halasa <khc@pm.waw.pl>, Timothy Miller <miller@techsource.com>
Cc: David Schwartz <davids@webmaster.com>, linux-kernel@vger.kernel.org
Subject: Re: select for UNIX sockets?
Date: Tue, 10 Jun 2003 14:04:41 -0500	[thread overview]
Message-ID: <03061014044103.06462@tabby> (raw)
In-Reply-To: <m3k7buxbbr.fsf@defiant.pm.waw.pl>

On Tuesday 10 June 2003 09:21, Krzysztof Halasa wrote:
> Timothy Miller <miller@techsource.com> writes:
> > If you were to use blocking writes, and you sent too much data, then
> > you would block.  If you were to use non-blocking writes, then the
> > socket would take as much data as it could, then return from write()
> > with an indication of how much data actually got sent.  Then you call
> > select() again so as to wait for your next opportunity to send some
> > more of your data.
>
> This is all true in general but in this particular case of unix datagram
> sockets select (poll) is just buggy.

Ahh no.

The following is from Solaris 2.8 manpage on poll:

     The poll() function supports  regular  files,  terminal  and
     pseudo-terminal  devices,  STREAMS-based  files,  FIFOs  and
     pipes.  The behavior of poll() on elements of fds that refer
     to other types of file is unspecified.

     The poll() function supports sockets.

     A file descriptor for a socket that is listening for connec-
     tions  will indicate that it is ready for reading, once con-
     nections are available.  A file descriptor for a socket that
     is  connecting asynchronously will indicate that it is ready
     for writing, once a connection has been established.

As in: ALWAYS ready to write as soon as a connection is made. It can
still block on a write if the amount to write is larger than the buffer
available. Nothing is said about the AMOUNT that can be written
(though with most FIFOs/pipes the limit is ~ 4K, though not guaranteed
since other writers may fill it between the poll and the write.

The select function (3c):

     The select() function supports regular files,  terminal  and
     pseudo-terminal  devices,  STREAMS-based  files,  FIFOs  and
     pipes. The behavior of select()  on  file  descriptors  that
     refer to other types of file is unspecified.

And the following on it's use on sockets:

     A file descriptor for a socket that is listening for connec-
     tions  will indicate that it is ready for reading, when con-
     nections are available.  A file descriptor for a socket that
     is  connecting asynchronously will indicate that it is ready
     for writing, when a connection has been established.

as in "READY for writing", not that it won't block when you DO write.

(Also "READY for reading", not that it won't block when you DO read.)

You've been lucky to have relatively idle systems or large memory
systems.

I suspect you actually were blocking, just not for very long.










  reply	other threads:[~2003-06-10 18:54 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-06 12:20 select for UNIX sockets? MarKol
2003-06-07  0:14 ` David Schwartz
2003-06-08  0:04   ` Krzysztof Halasa
2003-06-09  3:11     ` David Schwartz
2003-06-09 17:18       ` Krzysztof Halasa
2003-06-09 17:55         ` David Schwartz
2003-06-09 22:24           ` Krzysztof Halasa
2003-06-10 13:34             ` Timothy Miller
2003-06-10 13:52               ` Richard B. Johnson
2003-06-10 14:21               ` Krzysztof Halasa
2003-06-10 19:04                 ` Jesse Pollard [this message]
2003-06-11 21:55                   ` Krzysztof Halasa
2003-06-11 22:50                     ` David Schwartz
2003-06-11 12:51                 ` Edgar Toernig
2003-06-10 21:40             ` David Schwartz
2003-06-11 22:04               ` Krzysztof Halasa
2003-06-09 23:45         ` James Stevenson
2003-06-08  4:15   ` Chris Friesen
2003-06-09  3:05     ` David Schwartz
2003-06-09 16:46   ` MarKol
2003-06-09 17:05     ` David Schwartz
  -- strict thread matches above, loose matches on Subject: below --
2003-06-04 12:19 Petr Vandrovec
2003-06-06  0:28 ` Valdis.Kletnieks
2003-06-06  0:38   ` Petr Vandrovec
2003-06-03  0:08 Krzysztof Halasa
2003-06-03 14:51 ` Alan Cox
2003-06-04 23:27   ` Krzysztof Halasa
2003-06-05 13:17     ` Krzysztof Halasa
2003-06-04 11:55 ` Jesse Pollard
2003-06-04 12:42   ` Krzysztof Halasa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=03061014044103.06462@tabby \
    --to=jesse@cats-chateau.net \
    --cc=davids@webmaster.com \
    --cc=khc@pm.waw.pl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miller@techsource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox