20
20
DefaultDict ,
21
21
Deque ,
22
22
Dict ,
23
- Iterable ,
24
23
Iterator ,
25
24
List ,
26
25
Literal ,
34
33
)
35
34
36
35
import aiohappyeyeballs
36
+ from aiohappyeyeballs import AddrInfoType , SocketFactoryType
37
37
38
38
from . import hdrs , helpers
39
39
from .abc import AbstractResolver , ResolveResult
96
96
# which first appeared in Python 3.12.7 and 3.13.1
97
97
98
98
99
- __all__ = ("BaseConnector" , "TCPConnector" , "UnixConnector" , "NamedPipeConnector" )
99
+ __all__ = (
100
+ "BaseConnector" ,
101
+ "TCPConnector" ,
102
+ "UnixConnector" ,
103
+ "NamedPipeConnector" ,
104
+ "AddrInfoType" ,
105
+ "SocketFactoryType" ,
106
+ )
100
107
101
108
102
109
if TYPE_CHECKING :
@@ -826,8 +833,9 @@ class TCPConnector(BaseConnector):
826
833
the happy eyeballs algorithm, set to None.
827
834
interleave - “First Address Family Count” as defined in RFC 8305
828
835
loop - Optional event loop.
829
- tcp_sockopts - List of tuples of sockopts applied to underlying
830
- socket
836
+ socket_factory - A SocketFactoryType function that, if supplied,
837
+ will be used to create sockets given an
838
+ AddrInfoType.
831
839
"""
832
840
833
841
allowed_protocol_schema_set = HIGH_LEVEL_SCHEMA_SET | frozenset ({"tcp" })
@@ -849,7 +857,7 @@ def __init__(
849
857
timeout_ceil_threshold : float = 5 ,
850
858
happy_eyeballs_delay : Optional [float ] = 0.25 ,
851
859
interleave : Optional [int ] = None ,
852
- tcp_sockopts : Iterable [ Tuple [ int , int , Union [ int , Buffer ]]] = [] ,
860
+ socket_factory : Optional [ SocketFactoryType ] = None ,
853
861
):
854
862
super ().__init__ (
855
863
keepalive_timeout = keepalive_timeout ,
@@ -880,7 +888,7 @@ def __init__(
880
888
self ._happy_eyeballs_delay = happy_eyeballs_delay
881
889
self ._interleave = interleave
882
890
self ._resolve_host_tasks : Set ["asyncio.Task[List[ResolveResult]]" ] = set ()
883
- self ._tcp_sockopts = tcp_sockopts
891
+ self ._socket_factory = socket_factory
884
892
885
893
def _close_immediately (self ) -> List [Awaitable [object ]]:
886
894
for fut in chain .from_iterable (self ._throttle_dns_futures .values ()):
@@ -1105,7 +1113,7 @@ def _get_fingerprint(self, req: ClientRequest) -> Optional["Fingerprint"]:
1105
1113
async def _wrap_create_connection (
1106
1114
self ,
1107
1115
* args : Any ,
1108
- addr_infos : List [aiohappyeyeballs . AddrInfoType ],
1116
+ addr_infos : List [AddrInfoType ],
1109
1117
req : ClientRequest ,
1110
1118
timeout : "ClientTimeout" ,
1111
1119
client_error : Type [Exception ] = ClientConnectorError ,
@@ -1122,9 +1130,8 @@ async def _wrap_create_connection(
1122
1130
happy_eyeballs_delay = self ._happy_eyeballs_delay ,
1123
1131
interleave = self ._interleave ,
1124
1132
loop = self ._loop ,
1133
+ socket_factory = self ._socket_factory ,
1125
1134
)
1126
- for sockopt in self ._tcp_sockopts :
1127
- sock .setsockopt (* sockopt )
1128
1135
connection = await self ._loop .create_connection (
1129
1136
* args , ** kwargs , sock = sock
1130
1137
)
@@ -1256,13 +1263,13 @@ async def _start_tls_connection(
1256
1263
1257
1264
def _convert_hosts_to_addr_infos (
1258
1265
self , hosts : List [ResolveResult ]
1259
- ) -> List [aiohappyeyeballs . AddrInfoType ]:
1266
+ ) -> List [AddrInfoType ]:
1260
1267
"""Converts the list of hosts to a list of addr_infos.
1261
1268
1262
1269
The list of hosts is the result of a DNS lookup. The list of
1263
1270
addr_infos is the result of a call to `socket.getaddrinfo()`.
1264
1271
"""
1265
- addr_infos : List [aiohappyeyeballs . AddrInfoType ] = []
1272
+ addr_infos : List [AddrInfoType ] = []
1266
1273
for hinfo in hosts :
1267
1274
host = hinfo ["host" ]
1268
1275
is_ipv6 = ":" in host
0 commit comments