Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
da98359
Adding a server into socketserver that allows client connections to b…
deliberist Jan 21, 2018
15ec16b
bpo-32608: updated socketserver.rst based on pull-request comments su…
deliberist Jan 23, 2018
5444d6b
bpo-32608: Adding documentation into Doc/whatsnew and Misc/NEWS.d/nex…
deliberist Feb 10, 2018
f7de7b9
bpo-32608: Fixed test_socketserver where it modified the environment …
deliberist Feb 10, 2018
535f13d
Merge remote-tracking branch 'upstream/master' into socketserver_and_…
deliberist May 3, 2018
f84538d
Merge remote-tracking branch 'upstream/master' into socketserver_and_…
deliberist May 5, 2018
5eee0ea
Merge remote-tracking branch 'upstream/master' into socketserver_and_…
deliberist May 5, 2018
cd209db
bpo-32608: Per PR-5258 comments: moved documentation to Python 3.8 fi…
deliberist May 5, 2018
28f397d
bpo-32608: Per PR-5258 comments: made the ProcessingMixIn ensure Proc…
deliberist May 5, 2018
22bdab7
bpo-32608: Per PR-5258 comments, removed "multiprocessing.process._da…
deliberist May 5, 2018
9adc823
bpo-32608: fixing errors with test_socketserver in a Windows environm…
deliberist May 6, 2018
1f32fd7
bpo-32608: Fixing broken test_socketserver tests when run in Linux.
deliberist May 7, 2018
ef2fd3b
bpo-32608: Fixing broken test_socketserver tests when run in Windows.
deliberist May 7, 2018
7097ae6
bpo-32608: Merge remote-tracking branch 'upstream/master' into socket…
deliberist Jun 7, 2018
61ef9f8
Merge pull request #1 from python/master
Mar 16, 2021
77d2cb2
Merge branch 'socketserver_and_multiprocessing' into master
Mar 17, 2021
18d14fd
Merge pull request #2 from rbprogrammer/master
Mar 17, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
bpo-32608: fixing errors with test_socketserver in a Windows environm…
…ent.
  • Loading branch information
deliberist committed May 6, 2018
commit 9adc823ba00deca7bc32483277fd0f41f221847c
11 changes: 7 additions & 4 deletions Lib/socketserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def __init__(self, server_address, RequestHandlerClass):
"""Constructor. May be extended, do not override."""
self.server_address = server_address
self.RequestHandlerClass = RequestHandlerClass
self.__is_shut_down = threading.Event()
self.__is_shut_down = multiprocessing.Event()
self.__shutdown_request = False

def server_activate(self):
Expand Down Expand Up @@ -674,9 +674,12 @@ def _wait_on_any_child(self, blocking):
if p.sentinel in joinable_sentinels]

# Just need to join() one.
proc = joinable_processes[0]
proc.join()
return proc.pid
if joinable_processes:
proc = joinable_processes[0]
proc.join()
return proc.pid
else:
return None

def _process_request_in_child(self, request, client_address):
"""Handles the actual request in the new child process."""
Expand Down
44 changes: 26 additions & 18 deletions Lib/test/test_socketserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,23 @@ def simple_subprocess(testcase):
testcase.assertEqual(pid2, pid)
testcase.assertEqual(72 << 8, status)

class EchoingStreamRequestHandler(socketserver.StreamRequestHandler):
"""Request Handler that echos back to the client the data it received."""
def handle(self):
line = self.rfile.readline()
self.wfile.write(line)

class EchoingDatagramRequestHandler(socketserver.DatagramRequestHandler):
"""Request Handler that echos back to the client the data it received."""
def handle(self):
line = self.rfile.readline()
self.wfile.write(line)

def _handle_error(self, request, client_address):
"""Handler that closes the client's connection, then raises an error."""
self.close_request(request)
raise

class SocketServerTest(unittest.TestCase):
"""Test all socket servers."""

Expand Down Expand Up @@ -101,19 +118,10 @@ def pickaddr(self, proto):
return fn

def make_server(self, addr, svrcls, hdlrbase):
class MyServer(svrcls):
def handle_error(self, request, client_address):
self.close_request(request)
raise

class MyHandler(hdlrbase):
def handle(self):
line = self.rfile.readline()
self.wfile.write(line)

if verbose: print("creating server")
try:
server = MyServer(addr, MyHandler)
server = svrcls(addr, hdlrbase)
server.handle_error = _handle_error
except PermissionError as e:
# Issue 29184: cannot bind() a Unix socket on Android.
self.skipTest('Cannot create server (%s, %s): %s' %
Expand Down Expand Up @@ -181,24 +189,24 @@ def dgram_examine(self, proto, addr):

def test_TCPServer(self):
self.run_server(socketserver.TCPServer,
socketserver.StreamRequestHandler,
EchoingStreamRequestHandler,
self.stream_examine)

def test_ThreadingTCPServer(self):
self.run_server(socketserver.ThreadingTCPServer,
socketserver.StreamRequestHandler,
EchoingStreamRequestHandler,
self.stream_examine)

@requires_forking
def test_ForkingTCPServer(self):
with simple_subprocess(self):
self.run_server(socketserver.ForkingTCPServer,
socketserver.StreamRequestHandler,
EchoingStreamRequestHandler,
self.stream_examine)

def test_ProcessingTCPServer(self):
self.run_server(socketserver.ProcessingTCPServer,
socketserver.StreamRequestHandler,
EchoingStreamRequestHandler,
self.stream_examine)

@requires_unix_sockets
Expand All @@ -223,12 +231,12 @@ def test_ForkingUnixStreamServer(self):

def test_UDPServer(self):
self.run_server(socketserver.UDPServer,
socketserver.DatagramRequestHandler,
EchoingDatagramRequestHandler,
self.dgram_examine)

def test_ThreadingUDPServer(self):
self.run_server(socketserver.ThreadingUDPServer,
socketserver.DatagramRequestHandler,
EchoingDatagramRequestHandler,
self.dgram_examine)

@requires_forking
Expand All @@ -240,7 +248,7 @@ def test_ForkingUDPServer(self):

def test_ProcessingUDPServer(self):
self.run_server(socketserver.ProcessingUDPServer,
socketserver.DatagramRequestHandler,
EchoingDatagramRequestHandler,
self.dgram_examine)

@requires_unix_sockets
Expand Down