[Python-Dev] Socket timeout patch

Steve Holden sholden@holdenweb.com
Fri, 7 Jun 2002 14:19:18 -0400


[ ... ]
[Guido]
> > - The original timeout socket code (in Python) by Tim O'Malley had a
> >   global timeout which you could set so that *all* sockets
> >   *automatically* had their timeout set.  This is nice if you want it
> >   to affect library modules like urllib or ftplib.  That feature is
> >   currently missing.  Should we add it?  (I have some concerns about
> >   it, in that it might break other code -- and it doesn't seem wise to
> >   do this for server-end sockets in general.  But it's a nice hack for
> >   smaller programs.)
>
[Mike]
>   Is it really so painful for apps to keep track of all their sockets
> and then do something like:
>
>      for sock in sock_list:
>         sock.settimeout (blah)
>
>   Why keep track of them in the socket module, unless there's already code
> for this.
>
It isn't painful, it's impossible (unless you want to revise all the
libraries).

The real problem comes when a program uses a socket-based library such as
smtplib or ftplib. Without the ability to impose a default timeout the
library client has no way to set a timeout until the library has created the
socket (and even then it will break encapsulation to do so in many cases).

Unfortunately, the most common requirement for a timeout is to avoid socket
code hanging when it makes the initial attempt to connect to a
non-responsive host. Under these circumstances, if the connect() doesn't
time out it can apparently be as long as two hours before an exception is
raised.

[...]

regards
-----------------------------------------------------------------------
Steve Holden                                 http://www.holdenweb.com/
Python Web Programming                http://pydish.holdenweb.com/pwp/
-----------------------------------------------------------------------