Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
order to accept exactly one connection. Patch by Daniel Evers.
This commit is contained in:
commit
3cade9942e
|
@ -662,8 +662,8 @@ correspond to Unix system calls applicable to sockets.
|
||||||
.. method:: socket.listen(backlog)
|
.. method:: socket.listen(backlog)
|
||||||
|
|
||||||
Listen for connections made to the socket. The *backlog* argument specifies the
|
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
|
maximum number of queued connections and should be at least 0; the maximum value
|
||||||
is system-dependent (usually 5).
|
is system-dependent (usually 5), the minimum value is forced to 0.
|
||||||
|
|
||||||
|
|
||||||
.. method:: socket.makefile(mode='r', buffering=None, *, encoding=None, \
|
.. method:: socket.makefile(mode='r', buffering=None, *, encoding=None, \
|
||||||
|
|
|
@ -797,6 +797,13 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
self.assertRaises(TypeError, pickle.dumps, sock, protocol)
|
self.assertRaises(TypeError, pickle.dumps, sock, protocol)
|
||||||
|
|
||||||
|
def test_listen_backlog0(self):
|
||||||
|
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
srv.bind((HOST, 0))
|
||||||
|
# backlog = 0
|
||||||
|
srv.listen(0)
|
||||||
|
srv.close()
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(thread, 'Threading required for this test.')
|
@unittest.skipUnless(thread, 'Threading required for this test.')
|
||||||
class BasicTCPTest(SocketConnectedTest):
|
class BasicTCPTest(SocketConnectedTest):
|
||||||
|
|
|
@ -270,6 +270,7 @@ Carey Evans
|
||||||
Tim Everett
|
Tim Everett
|
||||||
Paul Everitt
|
Paul Everitt
|
||||||
David Everly
|
David Everly
|
||||||
|
Daniel Evers
|
||||||
Winston Ewert
|
Winston Ewert
|
||||||
Greg Ewing
|
Greg Ewing
|
||||||
Martijn Faassen
|
Martijn Faassen
|
||||||
|
|
|
@ -143,6 +143,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
|
||||||
|
order to accept exactly one connection. Patch by Daniel Evers.
|
||||||
|
|
||||||
- Issue #12011: signal.signal() and signal.siginterrupt() raise an OSError,
|
- Issue #12011: signal.signal() and signal.siginterrupt() raise an OSError,
|
||||||
instead of a RuntimeError: OSError has an errno attribute.
|
instead of a RuntimeError: OSError has an errno attribute.
|
||||||
|
|
||||||
|
|
|
@ -2220,8 +2220,10 @@ sock_listen(PySocketSockObject *s, PyObject *arg)
|
||||||
if (backlog == -1 && PyErr_Occurred())
|
if (backlog == -1 && PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
if (backlog < 1)
|
/* To avoid problems on systems that don't allow a negative backlog
|
||||||
backlog = 1;
|
* (which doesn't make sense anyway) we force a minimum value of 0. */
|
||||||
|
if (backlog < 0)
|
||||||
|
backlog = 0;
|
||||||
res = listen(s->sock_fd, backlog);
|
res = listen(s->sock_fd, backlog);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
|
@ -2234,8 +2236,9 @@ PyDoc_STRVAR(listen_doc,
|
||||||
"listen(backlog)\n\
|
"listen(backlog)\n\
|
||||||
\n\
|
\n\
|
||||||
Enable a server to accept connections. The backlog argument must be at\n\
|
Enable a server to accept connections. The backlog argument must be at\n\
|
||||||
least 1; it specifies the number of unaccepted connection that the system\n\
|
least 0 (if it is lower, it is set to 0); it specifies the number of\n\
|
||||||
will allow before refusing new connections.");
|
unaccepted connections that the system will allow before refusing new\n\
|
||||||
|
connections.");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue