class twisted.internet.interfaces.IReactorSocket(Interface): (source)
Known implementations: twisted.internet.posixbase.PosixReactorBase, twisted.internet.testing.MemoryReactor, twisted.internet.testing.RaisingMemoryReactor
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. |
Method | adoptDatagramPort | Add an existing listening SOCK_DGRAM socket to the reactor to monitor for read and write readiness. |
Add an existing listening SOCK_STREAM socket to the reactor to monitor for new connections to accept and handle.
Parameters | fileDescriptor | A 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 ) |
addressFamily | The address family (or domain) of the socket. For example, socket.AF_INET6 . (type: AddressFamily ) | |
factory | A ServerFactory instance to use to create new protocols to handle connections accepted via this socket. (type: ServerFactory ) | |
Returns | An object providing IListeningPort . (type: IListeningPort ) | |
Raises | twisted.internet.error.UnsupportedAddressFamily | If the given address family is not supported by this reactor, or not supported with the given socket type. |
twisted.internet.error.UnsupportedSocketType | If the given socket type is not supported by this reactor, or not supported with the given socket type. |
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 | A 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 ) |
addressFamily | The address family (or domain) of the socket. For example, socket.AF_INET6 . (type: AddressFamily ) | |
factory | A ServerFactory instance to use to create a new protocol to handle the connection via this socket. (type: ServerFactory ) | |
Raises | UnsupportedAddressFamily | If the given address family is not supported by this reactor, or not supported with the given socket type. |
UnsupportedSocketType | If the given socket type is not supported by this reactor, or not supported with the given socket type. |
Add an existing listening SOCK_DGRAM socket to the reactor to monitor for read and write readiness.
Parameters | fileDescriptor | A 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. (type: int ) |
addressFamily | The address family or domain of the socket. For example, socket.AF_INET6 . (type: AddressFamily ) | |
protocol | A DatagramProtocol instance to connect to a UDP transport. (type: DatagramProtocol ) | |
maxPacketSize | The maximum packet size to accept. (type: int ) | |
Returns | An object providing IListeningPort . (type: IListeningPort ) | |
Raises | UnsupportedAddressFamily | If the given address family is not supported by this reactor, or not supported with the given socket type. |
UnsupportedSocketType | If the given socket type is not supported by this reactor, or not supported with the given socket type. |