[Python-Dev] the new 2.3a1 settimeout() with httplib and SSL
Guido van Rossum
guido@python.org
Mon, 27 Jan 2003 16:47:32 -0500
> > > It doesn't look terribly hard to make the SSL wrapper obey
> > > the timeout, by
> > > calling select() on the "raw" socket before calling
> > > SSL_write or SSL_read.
> > > I'm willing to try to get this to work.
> >
> > That's cool. I don't know much about the SSL_read() API -- does it
> > promise to read exactly the requested number of byte (unless the
> > socket is closed)? Then a single select() before it is called may not
> > be sufficient.
>
> I don't know any more than you do -- I've never looked at the OpenSSL docs
> until today. It looks like SSL_read may indeed return fewer bytes than
> requested: http://www.openssl.org/docs/ssl/SSL_read.html
Hm, from that page it looks like the internal implementation may
actually repeatedly read from the socket, until it has processed a
full 16K block. But I may be mistaken, since it also refers to a
non-blocking underlying "BIO", whatever that is. :-(
> But I still think that a single select() is OK. It seems to be working fine
> in my testing. The select() times out only if there has been no activity on
> the socket for the entire timeout period, which seems sufficient to me. I
> don't think it matters that SSL_read may return fewer bytes than requested.
> Maybe I'm missing something.
If you can see no CPU activity while it's waiting to time out, it's
probably okay.
> Anyhow, I'll do some more testing and then if it still seems to work I'll
> upload a patch later today.
Great! Please assign to me so I head about it.
--Guido van Rossum (home page: http://www.python.org/~guido/)