Re: socket close

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2007-07-04 at 12:34 +0200, Eric Dumazet wrote:
> On Wed, 04 Jul 2007 19:56:29 +1000
> skaller <skaller@xxxxxxxxxxxxxxxxxxxxx> wrote:
> 
> > I wonder if someone can tell me what Linux does here.
> > 
> > First: it seems to me Posix specification are such that
> > the behaviour on closing a socket is unspecified, except
> > if the socket is blocking and SO_LINGER is used to specify
> > a timeout. In that case the close blocks until written data
> > is sent down the wire or the nominated timeout expires.
> > 
> > IMHO this specification is unacceptable because it makes
> > reliable non-blocking socket operations impossible.
> > However I may misunderstand the spec.
> > 
> > Second: I have observed that in non-blocking mode,
> > Linux discards written data without sending it down the wire.
> > As above: this seems unacceptable, although it conforms to
> > Posix 'in vaccuuo' :)
> > 
> > Can anyone tell me what Linux *actually* does? 
> > 
> 
> In my understanding, the behavior at close() time depends if 
> you still have data in receive queue.
> 
> If you dont have data wating in receive queue  
> (but possibly some data in output queue), then stack sends 
> data and FIN, no loss of data.
> 
> However, If you have some unread data, then a RST is sent 
> (and data in output queue is lost).
> So maybe your app is actually closing a socket with 
> unread data (this would be an application error)

There is *definitely* unread data in the 
receive queue in our test case.

Looks like, after reading what it wants, the application
(a brain dead web server) should do a shutdown
on input. (A shutdown on the output IS being used).

Otherwise the RST is sent, triggering the client
to close its READER, and send a RST back to the server,
which then shuts down its writer. Is that right?

[I can't see why the kernel would flush the output
queue just because the application hasn't shutdown
the input side of the link]

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux