diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 70fdd6c8610..4f8a5950c99 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -134,10 +134,12 @@ except ImportError: import dummy_threading as threading from time import monotonic as time -__all__ = ["BaseServer", "TCPServer", "UDPServer", "ForkingUDPServer", - "ForkingTCPServer", "ThreadingUDPServer", "ThreadingTCPServer", +__all__ = ["BaseServer", "TCPServer", "UDPServer", + "ThreadingUDPServer", "ThreadingTCPServer", "BaseRequestHandler", "StreamRequestHandler", - "DatagramRequestHandler", "ThreadingMixIn", "ForkingMixIn"] + "DatagramRequestHandler", "ThreadingMixIn"] +if hasattr(os, "fork"): + __all__.extend(["ForkingUDPServer","ForkingTCPServer", "ForkingMixIn"]) if hasattr(socket, "AF_UNIX"): __all__.extend(["UnixStreamServer","UnixDatagramServer", "ThreadingUnixStreamServer", @@ -537,7 +539,9 @@ class UDPServer(TCPServer): # No need to close anything. pass -class ForkingMixIn: +if hasattr(os, "fork"): + # Non-standard indentation on this statement to avoid reindenting the body. + class ForkingMixIn: """Mix-in class to handle each request in a new process.""" @@ -647,8 +651,9 @@ class ThreadingMixIn: t.start() -class ForkingUDPServer(ForkingMixIn, UDPServer): pass -class ForkingTCPServer(ForkingMixIn, TCPServer): pass +if hasattr(os, "fork"): + class ForkingUDPServer(ForkingMixIn, UDPServer): pass + class ForkingTCPServer(ForkingMixIn, TCPServer): pass class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass diff --git a/Misc/NEWS b/Misc/NEWS index f07dff4ea20..1a1a8c78733 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -22,6 +22,9 @@ Core and Builtins Library ------- +- Issue #25931: Don't defining socketserver.Forking* names on platforms such + as Windows that do not support os.fork(). + - Issue #21776: distutils.upload now correctly handles HTTPError. Initial patch by Claudiu Popa.