sim16/matteo_env/Lib/site-packages/aiohttp/tcp_helpers.py

39 lines
962 B
Python
Raw Normal View History

2020-12-20 00:08:09 +00:00
"""Helper methods to tune a TCP connection"""
import asyncio
import socket
from contextlib import suppress
from typing import Optional # noqa
2022-09-18 13:17:20 +00:00
__all__ = ("tcp_keepalive", "tcp_nodelay")
2020-12-20 00:08:09 +00:00
2022-09-18 13:17:20 +00:00
if hasattr(socket, "SO_KEEPALIVE"):
2020-12-20 00:08:09 +00:00
def tcp_keepalive(transport: asyncio.Transport) -> None:
2022-09-18 13:17:20 +00:00
sock = transport.get_extra_info("socket")
2020-12-20 00:08:09 +00:00
if sock is not None:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
2022-09-18 13:17:20 +00:00
2020-12-20 00:08:09 +00:00
else:
2022-09-18 13:17:20 +00:00
def tcp_keepalive(transport: asyncio.Transport) -> None: # pragma: no cover
2020-12-20 00:08:09 +00:00
pass
def tcp_nodelay(transport: asyncio.Transport, value: bool) -> None:
2022-09-18 13:17:20 +00:00
sock = transport.get_extra_info("socket")
2020-12-20 00:08:09 +00:00
if sock is None:
return
if sock.family not in (socket.AF_INET, socket.AF_INET6):
return
value = bool(value)
# socket may be closed already, on windows OSError get raised
with suppress(OSError):
2022-09-18 13:17:20 +00:00
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, value)