Re: KQueue 0-length UDP packet

From: Fedor Indutny <fedor_at_indutny.com>
Date: Mon, 25 Aug 2014 01:41:48 +0400
Hello again!

I just realized that the wording was probably a bit off.

What I wanted to ask is: why does FreeBSD kqueue implementation treat
`SO_RCVLOWAT` as a raw packet size watermark, and not using the actual
data size for filtering out events?

I am totally fine with the fact that it triggers event on 0-size udp
packets, but
the behavior itself seems a bit odd, right?

Please let me know if this is a bug, and I'll submit a patch.

Cheers,
Fedor.


On Sat, Aug 2, 2014 at 2:57 PM, Fedor Indutny <fedor_at_indutny.com> wrote:

> After reading that line more carefully, I wonder if this behavior is
> really intentional here.
>
> It seems to me that `SO_RCVLOWAT` is supposed to set watermark value in
> terms of
> packet data bytes, not just raw packet size. And this is how `NOTE_LOWAT`
> actually
> works there, right?
>
> Could anyone please comment on this? Is it a bug?
>
> ----------------------
>
> Regarding OSX:
>
> Submitted Apple Bug # 17894467 , with a patch.
>
> If anyone has friends at Apple who could help getting this in, please let
> me know!
>
> Cheers,
> Fedor.
>
>
> On Sat, Aug 2, 2014 at 2:41 PM, Fedor Indutny <fedor_at_indutny.com> wrote:
>
>> Guess I know the answer:
>>
>> https://cloudup.com/cCkjLhI4M2r
>>
>> Basically, OSX is checking `kn_data` and FreeBSD is using
>> `so->so_rcv.sb_cc`.
>>
>> Thank you anyway!
>>
>>
>> On Sat, Aug 2, 2014 at 1:39 PM, Fedor Indutny <fedor_at_indutny.com> wrote:
>>
>>> Hello!
>>>
>>> I'm trying to figure out, why this code:
>>>
>>> https://github.com/indutny/0-udp
>>>
>>> Which basically sends a 0-length UDP packet to a server and polls
>>> kqueue events on the server fd.
>>>
>>> Return 1 kevent on FreeBSD, and blocks indefinitely without
>>> returning any events on OSX.
>>>
>>> So far I could see that FreeBSD and OSX are treating NOTE_LOWAT
>>> differently:
>>>
>>> *
>>> https://github.com/opensource-apple/xnu/blob/2fa84067f6cdeb23267f877ca4fd26201316da1b/bsd/kern/uipc_socket.c#L4461
>>> *
>>> https://github.com/freebsd/freebsd/blob/6901832d8588537c81afbdb91d1a22deb5582c47/sys/kern/uipc_socket.c#L3163-L3164
>>>
>>> FreeBSD's NOTE_LOWAT is overriding SO_RCVLOWAT, and OSX is using
>>> SO_RVCLOWAT as a minimum value. But, since NOTE_LOWAT is not
>>> involved here by default, I'm failing to see where exactly this
>>> event could pass through kqueue filter.
>>>
>>> Could anyone with UDP and/or KQueue implementation knowledge
>>> share some insights with me?
>>>
>>> Thank you very much!
>>> Fedor.
>>>
>>> (NOTE: Duplicate, first email wasn't posted, because I wasn't subscribed
>>> to the ML)
>>>
>>
>>
>
Received on Sun Aug 24 2014 - 19:42:09 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:51 UTC