How to timeout a recv() on an ssl connection?

Grant Edwards invalid at invalid.invalid
Mon Sep 10 13:37:37 EDT 2012


On 2012-09-10, Grant Edwards <invalid at invalid.invalid> wrote:
> I can't figure out how to timeout a recv() on an SSLSocket -- I'm using
> Python 2.6 nad  2.7. Here's what I've got so far (it needs to work on
> either a plain or SSL socket):
>
>         s.settimeout(timeout)
>         try:
>             b = ord(s.recv(1))
>         except socket.timeout:
>             return None
>         except ssl.SSLError as e:
>             if e.message == 'The read operation timed out':
>                 return None
>             else:
>                 raise
>         finally:
>             s.settimeout(None)
>              
>
> It works fine on normal sockets.  With an SSLSocket, it works the
> first time it's called with timeout set to something other than None
> (it times out properly). Subsequence reads with timeout set to None
> work, but then the second time it's called with a non-None timeout, it
> hangs for several minutes, and then the recv() returns an empty
> string.

Doh! Never mind.

The above code does appear to be working correctly.  I had a different
bug that was misleading me...


-- 
Grant Edwards               grant.b.edwards        Yow! What GOOD is a
                                  at               CARDBOARD suitcase ANYWAY?
                              gmail.com            



More information about the Python-list mailing list