Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!news-out.readnews.com!transit4.readnews.com!panix!not-for-mail From: Grant Edwards Newsgroups: comp.lang.python Subject: Re: How to timeout a recv() on an ssl connection? Date: Mon, 10 Sep 2012 17:37:37 +0000 (UTC) Organization: PANIX Public Access Internet and UNIX, NYC Lines: 36 Message-ID: References: NNTP-Posting-Host: dsl.comtrol.com X-Trace: reader1.panix.com 1347298657 11399 64.122.56.22 (10 Sep 2012 17:37:37 GMT) X-Complaints-To: abuse@panix.com NNTP-Posting-Date: Mon, 10 Sep 2012 17:37:37 +0000 (UTC) User-Agent: slrn/pre1.0.0-18 (Linux) Xref: csiph.com comp.lang.python:28838 On 2012-09-10, Grant Edwards 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