Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 31 Jul 2011 17:45:11 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        "Christoph P.U. Kukulies" <kuku@kukulies.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: invalid argument in select() when peer socket is in FD_SET
Message-ID:  <20110731154511.GB66652@stack.nl>
In-Reply-To: <4E356498.40001@kukulies.org>
References:  <4E356498.40001@kukulies.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110731154511.GB66652>