code: def sendall(self, s):
          
          while s:
              sent = self.send(s)
              s = s[sent:]
          return None
docs: Send data to the channel, without allowing partial results.  Unlike
          `send`, this method continues to send data from the given string until
          either all data has been sent or an error occurs.  Nothing is returned.
  
          :param str s: data to send.
  
          :raises socket.timeout:
              if sending stalled for longer than the timeout set by `settimeout`.
          :raises socket.error:
              if an error occurred before the entire string was sent.
  
          .. note::
              If the channel is closed while only part of the data has been
              sent, there is no way to determine how much data (if any) was sent.
              This is irritating, but identically follows Python's API.