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


_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to