invalid argument in select() when peer socket is in FD_SET
Jilles Tjoelker
jilles at stack.nl
Sun Jul 31 15:45:13 UTC 2011
On Sun, Jul 31, 2011 at 04:20:08PM +0200, Christoph P.U. Kukulies wrote:
> I posted this on freebsd-questions also but maybe the expert density
> isn't that high as here in "hackers".
> Since I think it may be a design or implementation issue in FreeBSDs'
> select(), I'm posting it here as well,
> hoping to get an experts' answer.
> I have written a small server to test TCP/IP roundtrip times of the
> packets in a proprietary protocol and while
> compiling and running this server on different platforms (Windows
> 7/cygwin, UbuntuLinux, FreeBSD 8.0 Release), I found
> that the server produces an error when the listening socket (on which
> the accept() is performed) is also
> member of the select() fd_set.
> On the other platforms the program works without error, just under
> FreeBSD I'm getting this "invalid argument" error.
> Comments appreciated (despite comments about the error checking logic
> [snip]
> tv.tv_sec = 0;
> tv.tv_usec = 5000000; /* 5 seconds */
> [snip]
> n = select(nfds, &readfds,
> (fd_set *) NULL, /* not interested in write */
> (fd_set *) NULL, /* ...or exceptions */
> &tv); /* timeout */
The number of microseconds in a struct timeval must be nonnegative and
less than one million (likewise, the number of nanoseconds in a struct
timespec must be nonnegative and less than 1000 million).
FreeBSD checks this strictly in most functions.
--
Jilles Tjoelker
More information about the freebsd-hackers
mailing list