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

next in thread | previous in thread | raw e-mail | index | archive | help
Am 31.07.2011 17:45, schrieb Jilles Tjoelker:
> 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.

Ah, thanks. That's another plus for FreeBSD.  Somehow I have been 
mislead during the development of
the sample server that it escaped to me, that the timestruct was the 
culprit.

Thanks again. saved me a lot of headaches.

--
Christoph





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