@@ -2142,11 +2142,15 @@ def connection_lost(self, exc):
2142
2142
async def wait_closed (self ):
2143
2143
await self .fut
2144
2144
2145
+ def set_socket_opts (self , sock ):
2146
+ # On macOS, SO_SNDBUF is reset by connect(). So this method
2147
+ # should be called after the socket is connected.
2148
+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_SNDBUF , 1024 )
2149
+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_RCVBUF , 1024 )
2150
+
2145
2151
def make_socket (self , cleanup = True ):
2146
2152
sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
2147
2153
sock .setblocking (False )
2148
- sock .setsockopt (socket .SOL_SOCKET , socket .SO_SNDBUF , 1024 )
2149
- sock .setsockopt (socket .SOL_SOCKET , socket .SO_RCVBUF , 1024 )
2150
2154
if cleanup :
2151
2155
self .addCleanup (sock .close )
2152
2156
return sock
@@ -2159,7 +2163,9 @@ def prepare_socksendfile(self):
2159
2163
srv_sock .bind ((support .HOST , port ))
2160
2164
server = self .run_loop (self .loop .create_server (
2161
2165
lambda : proto , sock = srv_sock ))
2166
+ self .set_socket_opts (srv_sock )
2162
2167
self .run_loop (self .loop .sock_connect (sock , ('127.0.0.1' , port )))
2168
+ self .set_socket_opts (sock )
2163
2169
2164
2170
def cleanup ():
2165
2171
if proto .transport is not None :
@@ -2264,9 +2270,9 @@ def prepare_sendfile(self, *, is_ssl=False, close_after=0):
2264
2270
else :
2265
2271
server_hostname = None
2266
2272
cli_sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
2273
+ cli_sock .connect ((support .HOST , port ))
2267
2274
# reduce send socket buffer size to test on relative small data sets
2268
2275
cli_sock .setsockopt (socket .SOL_SOCKET , socket .SO_SNDBUF , 1024 )
2269
- cli_sock .connect ((support .HOST , port ))
2270
2276
cli_proto = self .MySendfileProto (loop = self .loop )
2271
2277
tr , pr = self .run_loop (self .loop .create_connection (
2272
2278
lambda : cli_proto , sock = cli_sock ,
0 commit comments