async def dial_out(remote: NodeAPI, private_key: keys.PrivateKey, p2p_handshake_params: DevP2PHandshakeParams, protocol_handshakers: Sequence[HandshakerAPI[ProtocolAPI]]) -> ConnectionAPI:
    '\n    Perform the auth and P2P handshakes with the given remote.\n\n    Return a `Connection` object housing all of the negotiated sub protocols.\n\n    Raises UnreachablePeer if we cannot connect to the peer or\n    HandshakeFailure if the remote disconnects before completing the\n    handshake or if none of the sub-protocols supported by us is also\n    supported by the remote.\n    '
    transport = (await Transport.connect(remote, private_key))
    transport.logger.debug2('Initiating p2p handshake with %s', remote)
    try:
        (multiplexer, devp2p_receipt, protocol_receipts) = (await negotiate_protocol_handshakes(transport=transport, p2p_handshake_params=p2p_handshake_params, protocol_handshakers=protocol_handshakers))
    except BaseException:
        try:
            (await transport.close())
        except ConnectionResetError:
            transport.logger.debug('Could not wait for transport to close')
        raise
    transport.logger.debug2('Completed p2p handshake with %s', remote)
    connection = Connection(multiplexer=multiplexer, devp2p_receipt=devp2p_receipt, protocol_receipts=protocol_receipts, is_dial_out=True)
    return connection
Perform the auth and P2P handshakes with the given remote.

Return a `Connection` object housing all of the negotiated sub protocols.

Raises UnreachablePeer if we cannot connect to the peer or
HandshakeFailure if the remote disconnects before completing the
handshake or if none of the sub-protocols supported by us is also
supported by the remote.
async def dial_out(remote: NodeAPI, private_key: keys.PrivateKey, p2p_handshake_params: DevP2PHandshakeParams, protocol_handshakers: Sequence[HandshakerAPI[ProtocolAPI]]) -> ConnectionAPI:
    '\n    Perform the auth and P2P handshakes with the given remote.\n\n    Return a `Connection` object housing all of the negotiated sub protocols.\n\n    Raises UnreachablePeer if we cannot connect to the peer or\n    HandshakeFailure if the remote disconnects before completing the\n    handshake or if none of the sub-protocols supported by us is also\n    supported by the remote.\n    '
    transport = (await Transport.connect(remote, private_key))
    transport.logger.debug2('Initiating p2p handshake with %s', remote)
    try:
        (multiplexer, devp2p_receipt, protocol_receipts) = (await negotiate_protocol_handshakes(transport=transport, p2p_handshake_params=p2p_handshake_params, protocol_handshakers=protocol_handshakers))
    except BaseException:
        try:
            (await transport.close())
        except ConnectionResetError:
            transport.logger.debug('Could not wait for transport to close')
        raise
    transport.logger.debug2('Completed p2p handshake with %s', remote)
    connection = Connection(multiplexer=multiplexer, devp2p_receipt=devp2p_receipt, protocol_receipts=protocol_receipts, is_dial_out=True)
    return connection