summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/socketserver.rst7
-rw-r--r--Lib/socketserver.py7
-rw-r--r--Lib/test/test_socketserver.py12
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst2
5 files changed, 19 insertions, 10 deletions
diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst
index ceb962e..d65e9fe 100644
--- a/Doc/library/socketserver.rst
+++ b/Doc/library/socketserver.rst
@@ -140,9 +140,16 @@ server is the address family.
ForkingUDPServer
ThreadingTCPServer
ThreadingUDPServer
+ ForkingUnixStreamServer
+ ForkingUnixDatagramServer
+ ThreadingUnixStreamServer
+ ThreadingUnixDatagramServer
These classes are pre-defined using the mix-in classes.
+.. versionadded:: 3.12
+ The ``ForkingUnixStreamServer`` and ``ForkingUnixDatagramServer`` classes
+ were added.
To implement a service, you must derive a class from :class:`BaseRequestHandler`
and redefine its :meth:`~BaseRequestHandler.handle` method.
diff --git a/Lib/socketserver.py b/Lib/socketserver.py
index 842d526..cd028ef 100644
--- a/Lib/socketserver.py
+++ b/Lib/socketserver.py
@@ -141,6 +141,8 @@ if hasattr(socket, "AF_UNIX"):
__all__.extend(["UnixStreamServer","UnixDatagramServer",
"ThreadingUnixStreamServer",
"ThreadingUnixDatagramServer"])
+ if hasattr(os, "fork"):
+ __all__.extend(["ForkingUnixStreamServer", "ForkingUnixDatagramServer"])
# poll/select have the advantage of not requiring any extra file descriptor,
# contrarily to epoll/kqueue (also, they require a single syscall).
@@ -727,6 +729,11 @@ if hasattr(socket, 'AF_UNIX'):
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
+ if hasattr(os, "fork"):
+ class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass
+
+ class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass
+
class BaseRequestHandler:
"""Base class for request handler classes.
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 71ed4c7..c81d559 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -47,14 +47,6 @@ def receive(sock, n, timeout=test.support.SHORT_TIMEOUT):
else:
raise RuntimeError("timed out on %r" % (sock,))
-if HAVE_UNIX_SOCKETS and HAVE_FORKING:
- class ForkingUnixStreamServer(socketserver.ForkingMixIn,
- socketserver.UnixStreamServer):
- pass
-
- class ForkingUnixDatagramServer(socketserver.ForkingMixIn,
- socketserver.UnixDatagramServer):
- pass
@test.support.requires_fork()
@contextlib.contextmanager
@@ -211,7 +203,7 @@ class SocketServerTest(unittest.TestCase):
@requires_forking
def test_ForkingUnixStreamServer(self):
with simple_subprocess(self):
- self.run_server(ForkingUnixStreamServer,
+ self.run_server(socketserver.ForkingUnixStreamServer,
socketserver.StreamRequestHandler,
self.stream_examine)
@@ -247,7 +239,7 @@ class SocketServerTest(unittest.TestCase):
@requires_unix_sockets
@requires_forking
def test_ForkingUnixDatagramServer(self):
- self.run_server(ForkingUnixDatagramServer,
+ self.run_server(socketserver.ForkingUnixDatagramServer,
socketserver.DatagramRequestHandler,
self.dgram_examine)
diff --git a/Misc/ACKS b/Misc/ACKS
index d0ff4e8..633e9d9 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -160,6 +160,7 @@ Brice Berna
Olivier Bernard
Vivien Bernet-Rollande
Maxwell Bernstein
+Jay Berry
Eric Beser
Steven Bethard
Stephen Bevan
diff --git a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst
new file mode 100644
index 0000000..bd53177
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst
@@ -0,0 +1,2 @@
+:mod:`socketserver` gains ``ForkingUnixStreamServer`` and
+``ForkingUnixDatagramServer`` classes. Patch by Jay Berry.