diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-05-24 00:43:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-24 00:43:45 (GMT) |
commit | b97de3dd86046ac46567146d86a69d4f78ea09db (patch) | |
tree | afe626b6613f022bf01b917e6b6cde060f93d18c | |
parent | 2932755cc11fd82b4908d60b24b837aa4f3028e6 (diff) | |
download | cpython-b97de3dd86046ac46567146d86a69d4f78ea09db.zip cpython-b97de3dd86046ac46567146d86a69d4f78ea09db.tar.gz cpython-b97de3dd86046ac46567146d86a69d4f78ea09db.tar.bz2 |
bpo-33353: test_asyncio set SO_SNDBUF after connect (GH-7086)
bpo-32622, bpo-33353: On macOS, sock.connect() changes the
SO_SNDBUF value. Only set SO_SNDBUF and SO_RCVBUF buffer sizes
once a socket is connected or binded, not before.
-rw-r--r-- | Lib/test/test_asyncio/test_events.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index c9e39b2..64d726d 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -2142,11 +2142,15 @@ class SockSendfileMixin(SendfileBase): async def wait_closed(self): await self.fut + def set_socket_opts(self, sock): + # On macOS, SO_SNDBUF is reset by connect(). So this method + # should be called after the socket is connected. + sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024) + def make_socket(self, cleanup=True): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setblocking(False) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024) if cleanup: self.addCleanup(sock.close) return sock @@ -2159,7 +2163,9 @@ class SockSendfileMixin(SendfileBase): srv_sock.bind((support.HOST, port)) server = self.run_loop(self.loop.create_server( lambda: proto, sock=srv_sock)) + self.set_socket_opts(srv_sock) self.run_loop(self.loop.sock_connect(sock, ('127.0.0.1', port))) + self.set_socket_opts(sock) def cleanup(): if proto.transport is not None: @@ -2264,9 +2270,9 @@ class SendfileMixin(SendfileBase): else: server_hostname = None cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + cli_sock.connect((support.HOST, port)) # reduce send socket buffer size to test on relative small data sets cli_sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024) - cli_sock.connect((support.HOST, port)) cli_proto = self.MySendfileProto(loop=self.loop) tr, pr = self.run_loop(self.loop.create_connection( lambda: cli_proto, sock=cli_sock, |