Skip to content

Commit d94b3a6

Browse files
jb2170gpsheadsobolevn
authored
gh-103673: Add missing ForkingUnixStreamServer and ForkingUnixDatagramServer socketservers (#103674)
sockserver gains ForkingUnixStreamServer and ForkingUnixDatagramServer classes for consistency with all of the others. Ironically these existed but were buried in our test suite. Addresses #103673 <!-- gh-issue-number: gh-103673 --> * Issue: gh-103673 <!-- /gh-issue-number --> --------- Co-authored-by: Gregory P. Smith <[email protected]> Co-authored-by: Nikita Sobolev <[email protected]>
1 parent 209a0a7 commit d94b3a6

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

Doc/library/socketserver.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,16 @@ server is the address family.
140140
ForkingUDPServer
141141
ThreadingTCPServer
142142
ThreadingUDPServer
143+
ForkingUnixStreamServer
144+
ForkingUnixDatagramServer
145+
ThreadingUnixStreamServer
146+
ThreadingUnixDatagramServer
143147

144148
These classes are pre-defined using the mix-in classes.
145149

150+
.. versionadded:: 3.12
151+
The ``ForkingUnixStreamServer`` and ``ForkingUnixDatagramServer`` classes
152+
were added.
146153

147154
To implement a service, you must derive a class from :class:`BaseRequestHandler`
148155
and redefine its :meth:`~BaseRequestHandler.handle` method.

Lib/socketserver.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ class will essentially render the service "deaf" while one request is
141141
__all__.extend(["UnixStreamServer","UnixDatagramServer",
142142
"ThreadingUnixStreamServer",
143143
"ThreadingUnixDatagramServer"])
144+
if hasattr(os, "fork"):
145+
__all__.extend(["ForkingUnixStreamServer", "ForkingUnixDatagramServer"])
144146

145147
# poll/select have the advantage of not requiring any extra file descriptor,
146148
# contrarily to epoll/kqueue (also, they require a single syscall).
@@ -727,6 +729,11 @@ class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass
727729

728730
class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
729731

732+
if hasattr(os, "fork"):
733+
class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass
734+
735+
class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass
736+
730737
class BaseRequestHandler:
731738

732739
"""Base class for request handler classes.

Lib/test/test_socketserver.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,6 @@ def receive(sock, n, timeout=test.support.SHORT_TIMEOUT):
4747
else:
4848
raise RuntimeError("timed out on %r" % (sock,))
4949

50-
if HAVE_UNIX_SOCKETS and HAVE_FORKING:
51-
class ForkingUnixStreamServer(socketserver.ForkingMixIn,
52-
socketserver.UnixStreamServer):
53-
pass
54-
55-
class ForkingUnixDatagramServer(socketserver.ForkingMixIn,
56-
socketserver.UnixDatagramServer):
57-
pass
5850

5951
@test.support.requires_fork()
6052
@contextlib.contextmanager
@@ -211,7 +203,7 @@ def test_ThreadingUnixStreamServer(self):
211203
@requires_forking
212204
def test_ForkingUnixStreamServer(self):
213205
with simple_subprocess(self):
214-
self.run_server(ForkingUnixStreamServer,
206+
self.run_server(socketserver.ForkingUnixStreamServer,
215207
socketserver.StreamRequestHandler,
216208
self.stream_examine)
217209

@@ -247,7 +239,7 @@ def test_ThreadingUnixDatagramServer(self):
247239
@requires_unix_sockets
248240
@requires_forking
249241
def test_ForkingUnixDatagramServer(self):
250-
self.run_server(ForkingUnixDatagramServer,
242+
self.run_server(socketserver.ForkingUnixDatagramServer,
251243
socketserver.DatagramRequestHandler,
252244
self.dgram_examine)
253245

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ Brice Berna
160160
Olivier Bernard
161161
Vivien Bernet-Rollande
162162
Maxwell Bernstein
163+
Jay Berry
163164
Eric Beser
164165
Steven Bethard
165166
Stephen Bevan
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
:mod:`socketserver` gains ``ForkingUnixStreamServer`` and
2+
``ForkingUnixDatagramServer`` classes. Patch by Jay Berry.

0 commit comments

Comments
 (0)