Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!news.mira.net.au!yarrina.connect.com.au!news.mel.connect.com.au!munnari.OZ.AU!news.ecn.uoknor.edu!news.uoknor.edu!news.nodak.edu!netnews1.nwnet.net!news.u.washington.edu!uw-beaver!uhog.mit.edu!news.kei.com!nntp.coast.net!news00.sunet.se!sunic!news99.sunet.se!nntp-trd.UNINETT.no!due.unit.no!usenet
From: Arnt Gulbrandsen <agulbra@troll.no>
Newsgroups: comp.unix.bsd.freebsd.misc,comp.os.linux.development.apps
Subject: Re: Checking for a closed socket connection
Date: 31 Jan 1996 17:56:24 +0100
Organization: Troll Tech AS, fax +47 22646949
Lines: 40
Message-ID: <d6wohrkfglj.fsf@pentagram.troll.no>
References: <NEWTNews.822505959.29723.jalvarez@sundev.uno.com>
<4e7l8n$50f@charm.il.ft.hse.nl> <4effu2$ega@phoenix.ea4els.ampr.org>
<d6wag372qps.fsf@pentagram.troll.no> <DLzIH5.AAy@pe1chl.ampr.org>
NNTP-Posting-Host: pentagram.troll.no
X-Newsreader: Gnus v5.0.8
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.freebsd.misc:13437 comp.os.linux.development.apps:11806
rob@pe1chl.ampr.org (Rob Janssen)
> In <d6wag372qps.fsf@pentagram.troll.no> Arnt Gulbrandsen <agulbra@troll.no> wr
ites:
>
> >> is it acceptable therefore to read 0 bytes, or write 0 bytes?
>
> >The TCP protocol allows packets with 0 bytes payload, but I would not
> >recommend using it at the application layer - you're staking too much
> >on the kernel implementation.
>
> TCP cannot send 0-byte packets. Actually, a user cannot send TCP packets
> at all!
True. And yet the TCP protocol allows the sending TCP stack to send a
packet with 0 bytes payload (without payload, if you wish). The
crucial difference is that the user cannot send TCP packets at all.
It's possible for a user program to ask, but not to force the TCP
stack to send off a packet. Before anyone says "that's wrong":
Consider what happens if the TCP stack obliges, the packet sent is
lost, and the client sends more data before the TCP stack resends.
There is a major difference between the TCP protocol and the various
implementations of it, and between the TCP stack and the TCP-using
client program.
> TCP is a stream-based protocol. The user submits data, and TCP is free
> to packetize it in packets of any size it likes, and send it on the
> connection. You cannot be sure the packet size will have any relation
> to the size of your write().
Quite.
As I said, even if inspection shows it to "work" on one particular TCP
stack it probably won't work on many others.
(I know I do it myself, but I really hate it when people followup to a
posting of mine without, apparently, reading it through.)
--Arnt