From owner-freebsd-net@FreeBSD.ORG Tue Aug 31 13:15:54 2010 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3148910656BB for ; Tue, 31 Aug 2010 13:15:54 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id 7E33A8FC19 for ; Tue, 31 Aug 2010 13:15:53 +0000 (UTC) Received: (qmail 71122 invoked from network); 31 Aug 2010 13:13:29 -0000 Received: from localhost (HELO [127.0.0.1]) ([127.0.0.1]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 31 Aug 2010 13:13:29 -0000 Message-ID: <4C7D0089.1020104@freebsd.org> Date: Tue, 31 Aug 2010 15:15:53 +0200 From: Andre Oppermann User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2 MIME-Version: 1.0 To: Robert Watson References: <4C7A7B25.9040300@freebsd.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org Subject: Re: Removal of deprecated implied connect for TCP X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Aug 2010 13:15:54 -0000 On 31.08.2010 12:04, Robert Watson wrote: > > On Sun, 29 Aug 2010, Andre Oppermann wrote: > >> When T/TCP RFC1644 support was introduced in r6283 by wollman 15 years ago the semantics of >> sendto(2) with regard to TCP sockets were changed. >> >> It became possible directly do a sendto(2) call with the target address in the *to argument >> instead of doing a connect(2) first and subsequent write(2) or send(2) calls as the standard TCP >> API specifies. Optionally MSG_EOR could be specified to close the connection again right again >> after the data has been sent out. >> >> This is totally non-portable and no other OS (Linux, NetBSD, OpenBSD, Solaris, HP-UX) ever >> supported this functionality for TCP sockets. FreeBSD was the only OS to ever ship this. >> >> T/TCP was ill-defined and had major security issues and never gained any support. It has been >> defunct in FreeBSD and most code has been removed about 6 years ago. The sendto(2) extended >> functionality is one of the last parts that persisted and remained around living a zombie life. >> >> I want to remove it now because it is totally non-portable, has no known users and complicates the >> TCP send path. The patch is attached. >> >> If you have any objections speak up now. > > I'm not entirely comfortable with this change, and would like a chance to cogitate on it a bit more. > While I'm not aware of any applications depending on the semantic for TCP, I know that we do use it > for UNIX domain sockets. I don't have any plans to remove the implied connect support from the socket layer or other protocols, only from TCP. > Since it's a documented API, if we are going to remove it, then we need to > go through a deprecation process, not least by marking it as a deprecated API in 8.x before having > it vanish in 9.0. > > (I won't be sorry to see the complexity go, but I'm not sure I have all the implications in mind as > yet...) The only implication would be a FreeBSD-only application (since nobody else ever supported it) that depends on the TCP implied connect. While not impossible it is unlikely for such an application to exist. For deprecating this part of the TCP API there is no documentation to the implied connect in tcp(4). In sendto(2) it doesn't differentiate between protocols and simply says: "... sendto() and sendmsg() may be used at any time." For MSG_EOF it says that is only supported for SOCK_STREAM sockets in the PF_INET protocol family. These sentences have to be corrected. -- Andre