| """Helper methods to tune a TCP connection""" |
|
|
| import asyncio |
| import socket |
| from contextlib import suppress |
| from typing import Optional |
|
|
| __all__ = ("tcp_keepalive", "tcp_nodelay") |
|
|
|
|
| if hasattr(socket, "SO_KEEPALIVE"): |
|
|
| def tcp_keepalive(transport: asyncio.Transport) -> None: |
| sock = transport.get_extra_info("socket") |
| if sock is not None: |
| sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) |
|
|
| else: |
|
|
| def tcp_keepalive(transport: asyncio.Transport) -> None: |
| pass |
|
|
|
|
| def tcp_nodelay(transport: asyncio.Transport, value: bool) -> None: |
| sock = transport.get_extra_info("socket") |
|
|
| if sock is None: |
| return |
|
|
| if sock.family not in (socket.AF_INET, socket.AF_INET6): |
| return |
|
|
| value = bool(value) |
|
|
| |
| with suppress(OSError): |
| sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, value) |
|
|