From owner-cvs-src@FreeBSD.ORG Thu Sep 15 13:14:20 2005 Return-Path: X-Original-To: cvs-src@FreeBSD.org Delivered-To: cvs-src@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0D3E716A41F; Thu, 15 Sep 2005 13:14:20 +0000 (GMT) (envelope-from maxim@macomnet.ru) Received: from mp2.macomnet.net (mp2.macomnet.net [195.128.64.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id 686C943D45; Thu, 15 Sep 2005 13:14:16 +0000 (GMT) (envelope-from maxim@macomnet.ru) Received: from localhost (localhost [127.0.0.1]) by mp2.macomnet.net (8.13.3/8.13.3) with ESMTP id j8FDE4Bq020649; Thu, 15 Sep 2005 17:14:15 +0400 (MSD) (envelope-from maxim@macomnet.ru) Date: Thu, 15 Sep 2005 17:14:04 +0400 (MSD) From: Maxim Konovalov To: Robert Watson In-Reply-To: <20050915130901.R75005@fledge.watson.org> Message-ID: <20050915165142.F20393@mp2.macomnet.net> References: <200509151145.j8FBjbAU070614@repoman.freebsd.org> <20050915130901.R75005@fledge.watson.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/kern uipc_socket.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Sep 2005 13:14:20 -0000 On Thu, 15 Sep 2005, 13:16+0100, Robert Watson wrote: > > 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. Linux 2.4.21 return ENOTSUP for SOCK_RAW and ENOTCONN for non-connected SOCK_DGRAM. Solaris 9 returns ENOTCONN for non-connected SOCK_RAW and they don't allow shutdown(2) on non-connected sockets. Anyhow, I'll backout this code. -- Maxim Konovalov