[Cryptography-dev] pyOpenSSL: non-blocking socket support

Nikolaus Rath Nikolaus at rath.org
Mon Jun 27 19:07:05 EDT 2016


Hello,

IIAC, when using the standard library's ssl module, the following can
happen (distilled from http://bugs.python.org/issue22499):

1. User calls SSLSocket.send(something)
2. SSLSocket.send raises SSLWantRead (or SSLWantWrite)
3. User calls select() to wait for Read (or write) readyness of the
   underlying fd.
4. User calls SSLSocket.send(something) again
5. SSLSocket.send raises SSLError

If I understand correctly, this is because the ssl module does not
actually implement the 'struct iostate' state machinery required by
OpenSSL and instead just blindly raises SSLWantRead/SSLWantWrite.

Can someone tell me how pyOpenSSL supports non-blocking socket? Does it
also require the caller to maintain struct iostate, or does it allow to
work with just SSLWantRead/Write and select()?


(Background: I'm wondering if switching to pyOpenSSL would be a feasible
way to tackle https://bitbucket.org/nikratio/s3ql/issues/87).


Thanks,
-Nikolaus

-- 
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«


More information about the Cryptography-dev mailing list