def start_client(self, event=None):
self.active = True<EOL>if event is not None:<EOL><INDENT>self.completion_event = event<EOL>self.start()<EOL>return<EOL><DEDENT>self.completion_event = event = threading.Event()<EOL>self.start()<EOL>Random.atfork()<EOL>while True:<EOL><INDENT>event.wait(<NUM_LIT:0.1>)<EOL>if not self.active:<EOL><INDENT>e = self.get_exception()<EOL>if e is not None:<EOL><INDENT>raise e<EOL><DEDENT>raise SSHException('<STR_LIT>')<EOL><DEDENT>if event.isSet():<EOL><INDENT>break<EOL><DEDENT><DEDENT>
Negotiate a new SSH2 session as a client.  This is the first step after
creating a new L{Transport}.  A separate thread is created for protocol
negotiation.

If an event is passed in, this method returns immediately.  When
negotiation is done (successful or not), the given C{Event} will
be triggered.  On failure, L{is_active} will return C{False}.

(Since 1.4) If C{event} is C{None}, this method will not return until
negotation is done.  On success, the method returns normally.
Otherwise an SSHException is raised.

After a successful negotiation, you will usually want to authenticate,
calling L{auth_password <Transport.auth_password>} or
L{auth_publickey <Transport.auth_publickey>}.

@note: L{connect} is a simpler method for connecting as a client.

@note: After calling this method (or L{start_server} or L{connect}),
    you should no longer directly read from or write to the original
    socket object.

@param event: an event to trigger when negotiation is complete
    (optional)
@type event: threading.Event

@raise SSHException: if negotiation fails (and no C{event} was passed
    in)