'Read up to len(b) bytes into the writable buffer *b* and return
the number of bytes read.  If the socket is non-blocking and no bytes
are available, None is returned.
If *b* is non-empty, a 0 return value indicates that the connection
was shutdown at the other end.'

def readinto(self, b):

    self._checkClosed()
    self._checkReadable()
    if self._timeout_occurred:
        raise IOError('cannot    read    from    timed    out    object')
    while True:
        try:
            return self._sock.recv_into(b)
        except timeout:
            self._timeout_occurred = True
            raise
        except error as e:
            n = e.args[0]
            if (n == EINTR):
                continue
            if (n in _blocking_errnos):
                return None
            raise
