'Initiate a connection attempt.
@param method: A callable which will actually start the connection
attempt.  For example, C{reactor.connectTCP}.
@param *args: Positional arguments to pass to C{method}, excluding the
factory.
@param **kwargs: Keyword arguments to pass to C{method}.
@return: A L{Deferred} which fires with an instance of the protocol
class passed to this L{ClientCreator}\'s initializer or fails if the
connection cannot be set up for some reason.'

def _connect(self, method, *args, **kwargs):

    def cancelConnect(deferred):
        connector.disconnect()
        if (f.pending is not None):
            f.pending.cancel()
    d = defer.Deferred(cancelConnect)
    f = _InstanceFactory(self.reactor, self.protocolClass(*self.args, **self.kwargs), d)
    connector = method(factory=f, *args, **kwargs)
    return d
