cvs commit: src/sys/kern uipc_socket.c

Robert Watson 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
>  Log:
>  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-src mailing list