Date: Tue, 7 Oct 2008 17:36:50 -0400 From: John Baldwin <jhb@freebsd.org> To: Robert Watson <rwatson@freebsd.org> Cc: cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/kern uipc_socket.c Message-ID: <200810071736.50999.jhb@freebsd.org> In-Reply-To: <200810072058.m97Kw3q0073534@repoman.freebsd.org> References: <200810072058.m97Kw3q0073534@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 07 October 2008 04:57:55 pm Robert Watson wrote: > rwatson 2008-10-07 20:57:55 UTC >=20 > FreeBSD src repository >=20 > Modified files: > sys/kern uipc_socket.c=20 > Log: > SVN rev 183675 on 2008-10-07 20:57:55Z by rwatson > =20 > In soreceive_dgram, when a 0-length buffer is passed into recv(2) and > no data is ready, return 0 rather than blocking or returning EAGAIN. > This is consistent with the behavior of soreceive_generic (soreceive) > in earlier versions of FreeBSD, and restores this behavior for UDP. > =20 > Discussed with: jhb, sam > MFC after: 3 days I do find this behavior odd though. I would expect recv(fd, NULL, 0) to discard the next packet from the socket if one is available rather than= =20 returning success and not doing anything (and it seems that this is what it= =20 does both before and now). Similarly, I would expect recv(fd, NULL, 0) to= =20 block on a blocking socket if there isn't a packet available. It would be= =20 orthogonal then to return EAGAIN in this case (no packet available,=20 zero-length user buffer) on a non-blocking socket. It seems that Solaris dropped this behavior (return 0) from their recv()=20 system call sometime after SunOS 4.0 from comments in the OpenSolaris sourc= e. =20 =46rom reading __skb_recv_datagram(), it seems that Linux 2.6 returns EAGAI= N. =20 NetBSD and OS X both have the odd behavior. OpenBSD has the odd behavior,= =20 but with a caveat of sorts having to do with control messages. OpenBSD=20 cvsweb annotate is down though, so I haven't found the reason for their=20 change. =2D-=20 John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810071736.50999.jhb>