code: 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 InterruptedError:
              #     continue
              except error as e:
                  if e.args[0] in _blocking_errnos:
                      return None
                  raise
docs: 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.