twisted.internet.interfaces.IReactorSocket(Interface)
interface documentationtwisted.internet.interfaces
View Source
(View In Hierarchy)
Known implementations: twisted.internet.posixbase.PosixReactorBase, twisted.test.proto_helpers.MemoryReactor, twisted.test.proto_helpers.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 . | |
factory | A ServerFactory
instance to use to create new protocols to handle connections accepted via
this socket. | |
Returns | An object providing 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 . | |
factory | A ServerFactory
instance to use to create a new protocol to handle the connection via this
socket. | |
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 I{SOCK_DGRAM} socket to the reactor to monitor for read and write readiness. @param 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 C{adoptDatagramPort} returns. @type fileDescriptor: C{int} @param addressFamily: The address family (or I{domain}) of the socket. For example, L{socket.AF_INET6}. @type addressFamily: C{int} @param protocol: A L{DatagramProtocol} instance to connect to a UDP transport. @type protocol: L{DatagramProtocol} @param maxPacketSize: The maximum packet size to accept. @type maxPacketSize: C{int} @return: An object providing L{IListeningPort}. @raise L{UnsupportedAddressFamily}: If the given address family is not supported by this reactor, or not supported with the given socket type. @raise UnsupportedSocketType: If the given socket type is not supported by this reactor, or not supported with the given socket type.