mjs / gevent_openssl

pyopenssl gevent compat. lib
Other
22 stars 18 forks source link

Connection.sendall is dangerously broken (can cause SSL3_WRITE_PENDING error) #12

Open wolever opened 8 years ago

wolever commented 8 years ago

Currently calling Connection.sendall can cause a loop which re-sends data because __iowait will keep calling _connection.sendall with the same buffer, even if part of it has already been sent.

The fix, I believe, is to have a custom implementation of sendall which loops calling send, something like this:

def sendall(self, buf, flags=0):
    while buf:
        sent = self.send(buf, flags)
        buf = buf[sent:]

(albeit with the extra fiddly bits to make sure it works correctly for memoryview and buffer objects)

See also: https://github.com/gevent/gevent/issues/736

wolever commented 7 years ago

Hey folk, any word on a fix here?