socket wedged forever in recv()
gtalvola at nameconnector.com
Mon Jan 27 17:41:13 CET 2003
Richard Jones [mailto:rjones at ekit-inc.com] wrote:
> On Sat, 25 Jan 2003 8:47 am, Geoffrey Talvola wrote:
> > I have a Windows NT client application that uses httplib to
> > make requests
> > to a Windows NT server running Apache 2.0 serving up a cgi script.
> > Unfortunately, if I reboot the Apache server, if a request
> > is in-progress,
> > the client will often wedge permanently. I built a debug
> > version of Python
> > 2.2.2 and verified that the client is stuck in a call to
> > recv() and will
> > apparently never exit. It's a little irritating that the
> > client can't
> > detect the situation and return from recv() with an error
> > code at this
> > point. Does anyone know a way to get the client to notice
> > that the server
> > is gone?
> With a timeout, as you've already discovered.
> > I have a couple of ideas for workarounds. timeoutsocket.py
> > (1) can avoid
> > the problem for non-SSL connections but it doesn't work for
> > SSL connections
> > at all, and my application needs to make some SSL
> > connections as well as
> > non-SSL connections. I'm also going to try Python 2.3a1 to
> > see if its new
> > support for timeout on sockets works with SSL.
> Apparently this _is_ fixed in 2.3
Unfortunately, this appears to be broken in 2.3a1 -- if you try to set a
timeout on the socket of a HTTPSConnection object, the CPU usage shoots up
to 100% and memory usage skyrockets but you still don't get the timeout you
wanted. I'm going to enter a bug report about this.
The good news is that I figured out how to patch timeoutsocket.py so that it
_does_ work with SSL, without having to upgrade to Python 2.3. I've sent
the patch to the author of timeoutsocket.py so presumably he'll release a
new version if he likes my patch, but if you want it sooner, just email me
and I'll send you the patch.
More information about the Python-list