cvs commit: src/sys/kern uipc_socket.c
rwatson at FreeBSD.org
Thu Sep 15 05:16:50 PDT 2005
On Thu, 15 Sep 2005, Maxim Konovalov wrote:
> maxim 2005-09-15 11:45:37 UTC
> FreeBSD src repository
> Modified files:
> sys/kern uipc_socket.c
> o Return ENOTCONN when shutdown(2) on non-connected socket.
> PR: kern/84761
> Submitted by: James Juran
> R-test: tools/regression/sockets/shutdown
> MFC after: 1 month
Are you sure this is the right thing to do? I've seen shutdown used in
several applications on non-connection-oriented sockets in order to
indicate no messages will be received, so not to allow received packets to
consume space. Typical use is in the context of a raw IP or IPv6 socket,
where raw packets will be sent but never received, and the socket will
otherwise collect the normal random network detrious.
For example, rtsold(8) uses shutdown(2) on its IPv6 raw socket to indicate
it is send-only, so received packets should not be stored in the socket
buffer since they will never be read. It does, however, contain the not
unusual bug that it is called with an argument of 0, assuming that that
will be the value SHUT_RD. I'm fairly sure we used to have other examples
of shutdown(2) being used in this way in the tree but don't see any others
in a casual glance.
While POSIX mentions behavior for full-duplex connections, it does not
specify for sockets that are not connection-oriented, so as I read it, the
behavior we provide is permitted.
Robert N M Watson
More information about the cvs-all