summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-05-24 00:43:45 (GMT)
committerGitHub <noreply@github.com>2018-05-24 00:43:45 (GMT)
commitb97de3dd86046ac46567146d86a69d4f78ea09db (patch)
treeafe626b6613f022bf01b917e6b6cde060f93d18c
parent2932755cc11fd82b4908d60b24b837aa4f3028e6 (diff)
downloadcpython-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.py12
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,