cheroot.connections module

Utilities to manage open connections.

class cheroot.connections.ConnectionManager(server)

Bases: object

Class which manages HTTPConnection objects.

This is for connections which are being kept-alive for follow-up requests.

_expire()

Expire least recently used connections.

This happens if there are either too many open connections, or if the connections have been timed out.

This should be called periodically.

_from_server_socket(server_socket)
property _num_connections

Return the current number of connections.

Includes all connections registered with the selector, minus one for the server socket, which is always registered with the selector.

_remove_invalid_sockets()

Clean up the resources of any broken connections.

This method attempts to detect any connections in an invalid state, unregisters them from the selector and closes the file descriptors of the corresponding network sockets where possible.

_run(expiration_interval)
property can_add_keepalive_connection

Flag whether it is allowed to add a new keep-alive connection.

close()

Close all monitored connections.

put(conn)

Put idle connection into the ConnectionManager to be managed.

Parameters

conn (cheroot.server.HTTPConnection) – HTTP connection to be managed

run(expiration_interval)

Run the connections selector indefinitely.

Args:
expiration_interval (float): Interval, in seconds, at which

connections will be checked for expiration.

Connections that are ready to process are submitted via self.server.process_conn()

Connections submitted for processing must be put() back if they should be examined again for another request.

Can be shut down by calling stop().

stop()

Stop the selector loop in run() synchronously.

May take up to half a second.

class cheroot.connections._ThreadsafeSelector

Bases: object

Thread-safe wrapper around a DefaultSelector.

There are 2 thread contexts in which it may be accessed:
  • the selector thread

  • one of the worker threads in workers/threadpool.py

The expected read/write patterns are:

Notably, this means _ThreadsafeSelector never needs to worry that connections will be removed behind its back.

The lock is held when iterating or modifying the selector but is not required when select()ing on it.

close()

Close the selector.

property connections

Retrieve connections registered with the selector.

register(fileobj, events, data=None)

Register fileobj with the selector.

select(timeout=None)

Return socket fd and data pairs from selectors.select call.

Returns entries ready to read in the form:

(socket_file_descriptor, connection)

unregister(fileobj)

Unregister fileobj from the selector.

cheroot.connections.prevent_socket_inheritance(sock)

Mark the given socket fd as non-inheritable (POSIX).