accepted sockets shouldn't inherit the SOCK_NONBLOCK flag (closes #25471)

This commit is contained in:
Benjamin Peterson 2015-10-24 20:06:04 -07:00
parent 458123bd18
commit d9dbf49383
3 changed files with 9 additions and 1 deletions

View 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.