cpython: 48743ad2d2ef (original) (raw)
Mercurial > cpython
changeset 70011:48743ad2d2ef 2.7
Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in order to accept exactly one connection. Patch by Daniel Evers. [#8498]
Antoine Pitrou solipsis@pitrou.net | |
---|---|
date | Tue, 10 May 2011 19:16:03 +0200 |
parents | 50a5e271edf9 |
children | a21f5af476cb |
files | Doc/library/socket.rst Lib/test/test_socket.py Misc/ACKS Misc/NEWS Modules/socketmodule.c |
diffstat | 5 files changed, 20 insertions(+), 6 deletions(-)[+] [-] Doc/library/socket.rst 4 Lib/test/test_socket.py 7 Misc/ACKS 1 Misc/NEWS 3 Modules/socketmodule.c 11 |
line wrap: on
line diff
--- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -644,8 +644,8 @@ correspond to Unix system calls applicab .. method:: socket.listen(backlog) Listen for connections made to the socket. The backlog argument specifies the
- maximum number of queued connections and should be at least 1; the maximum value
- is system-dependent (usually 5).
- maximum number of queued connections and should be at least 0; the maximum value
- is system-dependent (usually 5), the minimum value is forced to 0.
.. method:: socket.makefile([mode[, bufsize]])
--- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -700,6 +700,13 @@ class GeneralModuleTests(unittest.TestCa def test_sendall_interrupted_with_timeout(self): self.check_sendall_interrupted(True)
- def testListenBacklog0(self):
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)[](#l2.8)
srv.bind((HOST, 0))[](#l2.9)
# backlog = 0[](#l2.10)
srv.listen(0)[](#l2.11)
srv.close()[](#l2.12)
+ @unittest.skipUnless(thread, 'Threading required for this test.') class BasicTCPTest(SocketConnectedTest):
--- a/Misc/ACKS +++ b/Misc/ACKS @@ -243,6 +243,7 @@ Carey Evans Tim Everett Paul Everitt David Everly +Daniel Evers Greg Ewing Martijn Faassen Clovis Fabricio
--- a/Misc/NEWS +++ b/Misc/NEWS @@ -80,6 +80,9 @@ Core and Builtins Library ------- +- Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
- Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional.
- Issue #11164: Remove obsolete allnodes test from minidom test.
--- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2244,8 +2244,10 @@ sock_listen(PySocketSockObject *s, PyObj if (backlog == -1 && PyErr_Occurred()) return NULL; Py_BEGIN_ALLOW_THREADS
- /* To avoid problems on systems that don't allow a negative backlog
* (which doesn't make sense anyway) we force a minimum value of 0. */[](#l5.10)
- if (backlog < 0)
res = listen(s->sock_fd, backlog); Py_END_ALLOW_THREADS if (res < 0) @@ -2258,8 +2260,9 @@ PyDoc_STRVAR(listen_doc, "listen(backlog)\n[](#l5.17) \n[](#l5.18) Enable a server to accept connections. The backlog argument must be at\n[](#l5.19) -least 1; it specifies the number of unaccepted connection that the system\n[](#l5.20) -will allow before refusing new connections."); +least 0 (if it is lower, it is set to 0); it specifies the number of\n[](#l5.22) +unaccepted connections that the system will allow before refusing new\n[](#l5.23) +connections.");backlog = 0;[](#l5.12)