Skip to content

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

@wolever

Description

@wolever

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: gevent/gevent#736

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions