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