Removal of deprecated implied connect for TCP
Robert Watson
rwatson at FreeBSD.org
Tue Aug 31 10:04:02 UTC 2010
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.
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...)
Robert
More information about the freebsd-net
mailing list