# `Pyro5.socketutil` — Socket related utilities

Low level socket utilities.

class Pyro5.socketutil.SocketConnection(sock: socket, objectId: str = None, keep_open: bool = False)

  A wrapper class for plain sockets, containing various methods such as `send()` and `recv()`

Pyro5.socketutil.bind_unused_port(sock: socket, host: Union[str, IPv4Address, IPv6Address] = 'localhost') → int

  Bind the socket to a free port and return the port number. This code is based on the code in the stdlib’s test.test_support module.

Pyro5.socketutil.create_bc_socket(bind: Union[Tuple, str] = None, reuseaddr: bool = False, timeout: Optional[float] = -1, ipv6: bool = False) → socket

  Create a udp broadcast socket. Set ipv6=True to create an IPv6 socket rather than IPv4. Set ipv6=None to use the PREFER_IP_VERSION config setting.

Pyro5.socketutil.create_socket(bind: Union[Tuple, str] = None, connect: Union[Tuple, str] = None, reuseaddr: bool = False, keepalive: bool = True, timeout: Optional[float] = -1, noinherit: bool = False, ipv6: bool = False, nodelay: bool = True, sslContext: SSLContext = None) → socket

  Create a socket. Default socket options are keepalive and IPv4 family, and nodelay (nagle disabled). If ‘bind’ or ‘connect’ is a string, it is assumed a Unix domain socket is requested. Otherwise, a normal tcp/ip socket tuple (addr, port, …) is used. Set ipv6=True to create an IPv6 socket rather than IPv4. Set ipv6=None to use the PREFER_IP_VERSION config setting.

Pyro5.socketutil.find_probably_unused_port(family: int = AddressFamily.AF_INET, socktype: int = SocketKind.SOCK_STREAM) → int

  Returns an unused port that should be suitable for binding (likely, but not guaranteed). This code is copied from the stdlib’s test.test_support module.

Pyro5.socketutil.get_interface(ip_address: Union[str, IPv4Address, IPv6Address]) → Union[IPv4Interface, IPv6Interface]

  tries to find the network interface that connects to the given host’s address

Pyro5.socketutil.get_ip_address(hostname: str, workaround127: bool = False, version: int = None) → Union[IPv4Address, IPv6Address]

  Returns the IP address for the given host. If you enable the workaround, it will use a little hack if the ip address is found to be the loopback address. The hack tries to discover an externally visible ip address instead (this only works for ipv4 addresses). Set ipVersion=6 to return ipv6 addresses, 4 to return ipv4, 0 to let OS choose the best one or None to use config.PREFER_IP_VERSION.

Pyro5.socketutil.get_ssl_context(servercert: str = '', serverkey: str = '', clientcert: str = '', clientkey: str = '', cacerts: str = '', keypassword: str = '') → SSLContext

  creates an SSL context and caches it, so you have to set the parameters correctly before doing anything

Pyro5.socketutil.interrupt_socket(address: Tuple[str, int]) → None

  bit of a hack to trigger a blocking server to get out of the loop, useful at clean shutdowns

Pyro5.socketutil.receive_data(sock: socket, size: int) → bytes

  Retrieve a given number of bytes from a socket. It is expected the socket is able to supply that number of bytes. If it isn’t, an exception is raised (you will not get a zero length result or a result that is smaller than what you asked for). The partial data that has been received however is stored in the ‘partialData’ attribute of the exception object.

Pyro5.socketutil.send_data(sock: socket, data: bytes) → None

  Send some data over a socket. Some systems have problems with `sendall()` when the socket is in non-blocking mode. For instance, Mac OS X seems to be happy to throw EAGAIN errors too often. This function falls back to using a regular send loop if needed.

Pyro5.socketutil.set_keepalive(sock: socket) → None

  sets the SO_KEEPALIVE option on the socket, if possible.

Pyro5.socketutil.set_nodelay(sock: socket) → None

  sets the TCP_NODELAY option on the socket (to disable Nagle’s algorithm), if possible.

Pyro5.socketutil.set_noinherit(sock: socket) → None

  Mark the given socket fd as non-inheritable to child processes

Pyro5.socketutil.set_reuseaddr(sock: socket) → None

  sets the SO_REUSEADDR option on the socket, if possible.