interface documentation

Methods which allow a reactor to use externally created sockets.

For example, to use adoptStreamPort to implement behavior equivalent to that of IReactorTCP.listenTCP, you might write code like this:

    from socket import SOMAXCONN, AF_INET, SOCK_STREAM, socket
    portSocket = socket(AF_INET, SOCK_STREAM)
    # Set FD_CLOEXEC on port, left as an exercise.  Then make it into a
    # non-blocking listening port:
    portSocket.setblocking(False)
    portSocket.bind(('192.168.1.2', 12345))
    portSocket.listen(SOMAXCONN)

    # Now have the reactor use it as a TCP port
    port = reactor.adoptStreamPort(
        portSocket.fileno(), AF_INET, YourFactory())

    # portSocket itself is no longer necessary, and needs to be cleaned
    # up by us.
    portSocket.close()

    # Whenever the server is no longer needed, stop it as usual.
    stoppedDeferred = port.stopListening()

Another potential use is to inherit a listening descriptor from a parent process (for example, systemd or launchd), or to receive one over a UNIX domain socket.

Some plans for extending this interface exist. See:

Method adoptDatagramPort Add an existing listening SOCK_DGRAM socket to the reactor to monitor for read and write readiness.
Method adoptStreamConnection Add an existing connected SOCK_STREAM socket to the reactor to monitor for data.
Method adoptStreamPort Add an existing listening SOCK_STREAM socket to the reactor to monitor for new connections to accept and handle.
def adoptDatagramPort(fileDescriptor: int, addressFamily: AddressFamily, protocol: DatagramProtocol, maxPacketSize: int) -> IListeningPort: (source)

Add an existing listening SOCK_DGRAM socket to the reactor to monitor for read and write readiness.

Parameters
fileDescriptor:intA file descriptor associated with a socket which is already bound to an address and marked as listening. The socket must be set non-blocking. Any additional flags (for example, close-on-exec) must also be set by application code. Application code is responsible for closing the file descriptor, which may be done as soon as adoptDatagramPort returns.
addressFamily:AddressFamilyThe address family or domain of the socket. For example, socket.AF_INET6.
protocol:DatagramProtocolA DatagramProtocol instance to connect to a UDP transport.
maxPacketSize:intThe maximum packet size to accept.
Returns
IListeningPortAn object providing IListeningPort.
Raises
UnsupportedAddressFamilyIf the given address family is not supported by this reactor, or not supported with the given socket type.
UnsupportedSocketTypeIf the given socket type is not supported by this reactor, or not supported with the given socket type.
def adoptStreamConnection(fileDescriptor: int, addressFamily: AddressFamily, factory: ServerFactory): (source)

Add an existing connected SOCK_STREAM socket to the reactor to monitor for data.

Note that the given factory won't have its startFactory and stopFactory methods called, as there is no sensible time to call them in this situation.

Parameters
fileDescriptor:intA file descriptor associated with a socket which is already connected. The socket must be set non-blocking. Any additional flags (for example, close-on-exec) must also be set by application code. Application code is responsible for closing the file descriptor, which may be done as soon as adoptStreamConnection returns.
addressFamily:AddressFamilyThe address family (or domain) of the socket. For example, socket.AF_INET6.
factory:ServerFactoryA ServerFactory instance to use to create a new protocol to handle the connection via this socket.
Raises
UnsupportedAddressFamilyIf the given address family is not supported by this reactor, or not supported with the given socket type.
UnsupportedSocketTypeIf the given socket type is not supported by this reactor, or not supported with the given socket type.
def adoptStreamPort(fileDescriptor: int, addressFamily: AddressFamily, factory: ServerFactory) -> IListeningPort: (source)

Add an existing listening SOCK_STREAM socket to the reactor to monitor for new connections to accept and handle.

Parameters
fileDescriptor:intA file descriptor associated with a socket which is already bound to an address and marked as listening. The socket must be set non-blocking. Any additional flags (for example, close-on-exec) must also be set by application code. Application code is responsible for closing the file descriptor, which may be done as soon as adoptStreamPort returns.
addressFamily:AddressFamilyThe address family (or domain) of the socket. For example, socket.AF_INET6.
factory:ServerFactoryA ServerFactory instance to use to create new protocols to handle connections accepted via this socket.
Returns
IListeningPortAn object providing IListeningPort.
Raises
twisted.internet.error.UnsupportedAddressFamilyIf the given address family is not supported by this reactor, or not supported with the given socket type.
twisted.internet.error.UnsupportedSocketTypeIf the given socket type is not supported by this reactor, or not supported with the given socket type.