Detecting socket connection failure

Dieter Maurer dieter at handshake.de
Sat Jul 15 13:35:24 EDT 2006


schwehr at gmail.com writes on 10 Jul 2006 08:42:11 -0700:
> I've tried to RTFM this and am having no luck.    First off, I am using
> Mac OSX 10.4.7 with python 2.4.2 from fink.  I am trying to connect to
> a server that should be rejecting connections and I was surprised when
> it did not throw an exception or do something otherwise equally nasty.
> It just connects and never returns any data.  First, the proof that
> something is there and rejecting the connection (or is it that this
> thing actually accepts the connection and then drops it?)...
> 
> telnet localhost 31414
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> Connection closed by foreign host.

What you see here is that the connection was opened successfully
(the connect succeeded) and then closed again.

> ...
> In [1]: import socket, select
> 
> In [2]: remote = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
> 
> In [3]: remote.connect(('localhost',31414))
> 
> In [4]: remote.recv(200)
> Out[4]: ''

The means, that you see the same in Python:
"recv" returning an empty string indicates that the connection
was closed.

> 
> In [5]: r,w,e=select.select([remote],[remote],[remote],1)
> 
> In [6]: print r,w,e
> [<socket._socketobject object at 0x7e48d0>] [<socket._socketobject
> object at 0x7e48d0>] []

I have seen something similar recently:

  I can write ("send" to be precise) to a socket closed by
  the foreign partner without error
  (but of course, the written data does not arrive at the remote side).
  Only the second "send" raises an exception.

  I expect this is a TCP bug.


--
Dieter



More information about the Python-list mailing list