t.i.i.IReactorSocket(Interface) : interface documentation

Part of twisted.internet.interfaces View Source View In Hierarchy

Known implementations: twisted.internet.posixbase.PosixReactorBase

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 adoptStreamPort Add an existing listening SOCK_STREAM socket to the reactor to monitor for new connections to accept and handle.
Method adoptStreamConnection Add an existing connected SOCK_STREAM socket to the reactor to monitor for data.
def adoptStreamPort(fileDescriptor, addressFamily, factory): (source)
Add an existing listening SOCK_STREAM socket to the reactor to monitor for new connections to accept and handle.
ParametersfileDescriptorA 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. (type: int)
addressFamilyThe address family (or domain) of the socket. For example, socket.AF_INET6.
factoryA ServerFactory instance to use to create new protocols to handle connections accepted via this socket.
ReturnsAn object providing IListeningPort.
RaisesUnsupportedAddressFamilyIf 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, addressFamily, factory): (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.

ParametersfileDescriptorA 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. (type: int)
addressFamilyThe address family (or domain) of the socket. For example, socket.AF_INET6.
factoryA ServerFactory instance to use to create a new protocol to handle the connection via this socket.
RaisesUnsupportedAddressFamilyIf 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.
API Documentation for Twisted, generated by pydoctor at 2012-09-01 11:44:56.