2828from .types import HostPort
2929from .constants import (
3030 CRLF , COLON , HTTP_1_1 , IS_WINDOWS , WHITESPACE , DEFAULT_TIMEOUT ,
31- DEFAULT_THREADLESS , PROXY_AGENT_HEADER_VALUE , DEFAULT_SSL_CONTEXT_OPTIONS ,
31+ DEFAULT_THREADLESS , DEFAULT_CONNECT_TIMEOUT , PROXY_AGENT_HEADER_VALUE ,
32+ DEFAULT_SSL_CONTEXT_OPTIONS ,
3233)
3334
3435
@@ -249,9 +250,10 @@ def wrap_socket(
249250
250251
251252def new_socket_connection (
252- addr : HostPort ,
253- timeout : float = DEFAULT_TIMEOUT ,
254- source_address : Optional [HostPort ] = None ,
253+ addr : HostPort ,
254+ timeout : float = DEFAULT_TIMEOUT ,
255+ connect_timeout : float = DEFAULT_CONNECT_TIMEOUT ,
256+ source_address : Optional [HostPort ] = None ,
255257) -> socket .socket :
256258 conn = None
257259 try :
@@ -260,22 +262,29 @@ def new_socket_connection(
260262 conn = socket .socket (
261263 socket .AF_INET , socket .SOCK_STREAM , 0 ,
262264 )
263- conn .settimeout (timeout )
265+ conn .settimeout (connect_timeout )
264266 conn .connect (addr )
265267 else :
266268 conn = socket .socket (
267269 socket .AF_INET6 , socket .SOCK_STREAM , 0 ,
268270 )
269- conn .settimeout (timeout )
271+ conn .settimeout (connect_timeout )
270272 conn .connect ((addr [0 ], addr [1 ], 0 , 0 ))
271273 except ValueError :
272274 pass # does not appear to be an IPv4 or IPv6 address
273275
274276 if conn is not None :
277+ conn .settimeout (timeout )
275278 return conn
276279
277280 # try to establish dual stack IPv4/IPv6 connection.
278- return socket .create_connection (addr , timeout = timeout , source_address = source_address )
281+ conn = socket .create_connection (
282+ addr ,
283+ timeout = connect_timeout ,
284+ source_address = source_address ,
285+ )
286+ conn .settimeout (timeout )
287+ return conn
279288
280289
281290class socket_connection (contextlib .ContextDecorator ):
0 commit comments