]> granicus.if.org Git - python/commitdiff
accepted sockets shouldn't inherit the SOCK_NONBLOCK flag (closes #25471)
authorBenjamin Peterson <benjamin@python.org>
Sun, 25 Oct 2015 03:06:04 +0000 (20:06 -0700)
committerBenjamin Peterson <benjamin@python.org>
Sun, 25 Oct 2015 03:06:04 +0000 (20:06 -0700)
Lib/socket.py
Lib/test/test_socket.py
Misc/NEWS

index 004588671cf76311c3d5bd24fbfad2065a3ba4db..ff2f087678c2e3ba7755342867d3b40c7d5a0cb4 100644 (file)
@@ -185,7 +185,11 @@ class socket(_socket.socket):
         For IP sockets, the address info is a pair (hostaddr, port).
         """
         fd, addr = self._accept()
-        sock = socket(self.family, self.type, self.proto, fileno=fd)
+        # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
+        # new socket. We do not currently allow passing SOCK_NONBLOCK to
+        # accept4, so the returned socket is always blocking.
+        type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
+        sock = socket(self.family, type, self.proto, fileno=fd)
         # Issue #7995: if no default timeout is set and the listening
         # socket had a (non-zero) timeout, force the new socket in blocking
         # mode to override platform-specific socket flags inheritance.
index d3191121b58ac8fe8c2dfcb2d314dc6d57b954b8..a92265d9e5bf98c1bcfbe383e9ad4f764073ab65 100644 (file)
@@ -3863,6 +3863,7 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest):
         read, write, err = select.select([self.serv], [], [])
         if self.serv in read:
             conn, addr = self.serv.accept()
+            self.assertIsNone(conn.gettimeout())
             conn.close()
         else:
             self.fail("Error trying to do accept after select.")
index 01fbf1786c48b25b3cfd40c4c662eb92cca075de..7d673b2cc29df66c43c79a5b41960c3dc0953238 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -96,6 +96,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #25471: Sockets returned from accept() shouldn't appear to be
+  nonblocking.
+
 - Issue #25441: asyncio: Raise error from drain() when socket is closed.
 
 - Issue #25411: Improved Unicode support in SMTPHandler through better use of