how to know if socket is still connected

Grant Edwards grante at visi.com
Mon Jul 17 11:25:11 EDT 2006


On 2006-07-17, Cameron Laird <claird at lairds.us> wrote:

>>> works well, but sometimes the server drops the connection. so,
>>> what i need is something that will let me know if the
>>> connection is still ok, if not will reconnect.
>>
>>If the server has closed the connection, then a recv() on the
>>socket will return an empty string "", and a send() on the
>>socket will raise an exception.
>>
>>> what i thought, since it only lets you connect on a certain
>>> port one at a time, that i could use a try-except to connect
>>> every time, if it could not connect (because it already is)
>>> then i would just continue on. But if it is not connected, it
>>> would reconnect. that is what brings me here. Seems like it
>>> would work, but is there a better way?
>>
>>I don't see why the normal send() and recv() semantics aren't
>>sufficient.
> 			.
> 			.
> 			.
> Often normal send() and recv() semantics have been mistaught.
> An alert alien, looking at other common APIs in isolation, 
> might reasonably wonder whether there is some sort of 
> still_ok_to_use() sort of check as part of TCP.  As it happens,
> of course, that doesn't fit with the rest of socket networking,
> which takes the "modernist" approach of trying send() or recv(),
> and reporting any exception.

On most Unices there are some obscure API features that can be
used to generate a SIGPIPE under some vaguely specified error
conditions (e.g. TCP keepalive timeout).  I've only read about
them and never tried to use them, since I couldn't see anything
in the description of the features that was any benefit over
the nomral send() and recv() usage.

-- 
Grant Edwards                   grante             Yow!  Xerox your lunch
                                  at               and file it under "sex
                               visi.com            offenders"!



More information about the Python-list mailing list