Re: Question about socket timeouts
On Mon, 19 Aug 2013, Adrian Chadd wrote:
> Yes! Please file a PR!
This sorta implies that both are acceptable (although,
the Linux behavior seems more desirable).
http://austingroupbugs.net/view.php?id=369
> On 19 August 2013 12:33, Vitja Makarov <vitja.makarov@gmail.com> wrote:
>
>> Hi!
>>
>> Recently I was playing with small socket timeouts. setsockopt(2)
>> SO_RCVTIMEO and found a problem with it: if timeout is small enough
>> read(2) may return before timeout is actually expired.
>>
>> I was unable to reproduce this on linux box.
>>
>> I found that kernel uses a timer with 1/HZ precision so it converts
>> time in microseconds to ticks that's ok linux does it as well. The
>> problem is in details: freebsd uses floor() approach while linux uses
>> ceil():
>>
>> from FreeBSD's sys/kern/uipc_socket.c:
>> val = (u_long)(tv.tv_sec * hz) + tv.tv_usec / tick;
>> if (val == 0 && tv.tv_usec != 0)
>> val = 1; /* at least one tick if tv > 0 */
>>
>> from Linux's net/core/sock.c:
>> *timeo_p = tv.tv_sec*HZ + (tv.tv_usec+(1000000/HZ-1))/(1000000/HZ);
>>
>> So, for instance, we have a freebsd system running with kern.hz set
>> 100 and set receive timeout to 25ms that is converted to 2 ticks which
>> is 20ms. In my test program read(2) returns with EAGAIN set in
>> 0.019ms.
>>
>> So the question is: is that a problem or not?
>>
>> --
>> vitja.
--
DE
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
討論串 (同標題文章)
完整討論串 (本文為第 3 之 9 篇):