def sendall(self, s):
while s:<EOL><INDENT>if self.closed:<EOL><INDENT>raise socket.error('<STR_LIT>')<EOL><DEDENT>sent = self.send(s)<EOL>s = s[sent:]<EOL><DEDENT>return None<EOL>
Send data to the channel, without allowing partial results.  Unlike
L{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 s: data to send.
@type s: str

@raise socket.timeout: if sending stalled for longer than the timeout
    set by L{settimeout}.
@raise socket.error: if an error occured before the entire string was
    sent.

@note: If the channel is closed while only part of the data hase been
    sent, there is no way to determine how much data (if any) was sent.
    This is irritating, but identically follows python's API.