KQueue 0-length UDP packet

From: Fedor Indutny <fedor_at_indutny.com>
Date: Sat, 2 Aug 2014 13:39:43 +0400
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 Sat Aug 02 2014 - 07:40:04 UTC

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