bpo-33353: test_asyncio set SO_SNDBUF after connect (GH-7086) · python/cpython@b97de3d
@@ -2142,11 +2142,15 @@ def connection_lost(self, exc):
21422142async def wait_closed(self):
21432143await self.fut
214421442145+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+21452151def make_socket(self, cleanup=True):
21462152sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
21472153sock.setblocking(False)
2148-sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024)
2149-sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024)
21502154if cleanup:
21512155self.addCleanup(sock.close)
21522156return sock
@@ -2159,7 +2163,9 @@ def prepare_socksendfile(self):
21592163srv_sock.bind((support.HOST, port))
21602164server = self.run_loop(self.loop.create_server(
21612165lambda: proto, sock=srv_sock))
2166+self.set_socket_opts(srv_sock)
21622167self.run_loop(self.loop.sock_connect(sock, ('127.0.0.1', port)))
2168+self.set_socket_opts(sock)
2163216921642170def cleanup():
21652171if proto.transport is not None:
@@ -2264,9 +2270,9 @@ def prepare_sendfile(self, *, is_ssl=False, close_after=0):
22642270else:
22652271server_hostname = None
22662272cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2273+cli_sock.connect((support.HOST, port))
22672274# reduce send socket buffer size to test on relative small data sets
22682275cli_sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024)
2269-cli_sock.connect((support.HOST, port))
22702276cli_proto = self.MySendfileProto(loop=self.loop)
22712277tr, pr = self.run_loop(self.loop.create_connection(
22722278lambda: cli_proto, sock=cli_sock,