Coverage for /pythoncovmergedfiles/medio/medio/src/aiohttp/aiohttp/tcp_helpers.py: 42%

19 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:52 +0000

1"""Helper methods to tune a TCP connection""" 

2 

3import asyncio 

4import socket 

5from contextlib import suppress 

6from typing import Optional # noqa 

7 

8__all__ = ("tcp_keepalive", "tcp_nodelay") 

9 

10 

11if hasattr(socket, "SO_KEEPALIVE"): 

12 

13 def tcp_keepalive(transport: asyncio.Transport) -> None: 

14 sock = transport.get_extra_info("socket") 

15 if sock is not None: 

16 sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) 

17 

18else: 

19 

20 def tcp_keepalive(transport: asyncio.Transport) -> None: # pragma: no cover 

21 pass 

22 

23 

24def tcp_nodelay(transport: asyncio.Transport, value: bool) -> None: 

25 sock = transport.get_extra_info("socket") 

26 

27 if sock is None: 

28 return 

29 

30 if sock.family not in (socket.AF_INET, socket.AF_INET6): 

31 return 

32 

33 value = bool(value) 

34 

35 # socket may be closed already, on windows OSError get raised 

36 with suppress(OSError): 

37 sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, value)