--- Lib\SocketServer.py 2007-04-04 19:17:34.000000000 +0100 +++ LibNew\SocketServer.py 2008-01-23 14:20:07.671875000 +0000 @@ -585,4 +585,6 @@ self.wfile = StringIO() def finish(self): - self.socket.sendto(self.wfile.getvalue(), self.client_address) + wdata = self.wfile.getvalue() + if wdata: + self.socket.sendto(wdata, self.client_address) --- Lib\test\test_socketserver.py 2007-04-04 19:17:32.000000000 +0100 +++ LibNew\test\test_socketserver.py 2008-01-23 13:37:56.046875000 +0000 @@ -23,12 +23,25 @@ time.sleep(DELAY) self.wfile.write(line) +class MyMixinHandler_NoResponse: + def handle(self): + time.sleep(DELAY) + line = self.rfile.readline() + time.sleep(DELAY) + # no response + class MyStreamHandler(MyMixinHandler, StreamRequestHandler): pass class MyDatagramHandler(MyMixinHandler, DatagramRequestHandler): pass +class MyStreamHandler_NoResponse(MyMixinHandler_NoResponse, StreamRequestHandler): + pass + +class MyDatagramHandler_NoResponse(MyMixinHandler_NoResponse, DatagramRequestHandler): + pass + class MyMixinServer: def serve_a_few(self): for i in range(NREQ): @@ -57,6 +70,11 @@ verify(buf == teststring) s.close() +def testdgram_noresponse(proto, addr): + s = socket.socket(proto, socket.SOCK_DGRAM) + s.sendto(teststring, addr) + s.close() + def teststream(proto, addr): s = socket.socket(proto, socket.SOCK_STREAM) s.connect(addr) @@ -68,6 +86,12 @@ verify(buf == teststring) s.close() +def teststream_noresponse(proto, addr): + s = socket.socket(proto, socket.SOCK_STREAM) + s.connect(addr) + s.sendall(teststring) + s.close() + class ServerThread(threading.Thread): def __init__(self, addr, svrcls, hdlrcls): threading.Thread.__init__(self) @@ -194,7 +218,11 @@ def testall(): testloop(socket.AF_INET, tcpservers, MyStreamHandler, teststream) sloppy_cleanup() + testloop(socket.AF_INET, tcpservers, MyStreamHandler_NoResponse, teststream_noresponse) + sloppy_cleanup() testloop(socket.AF_INET, udpservers, MyDatagramHandler, testdgram) + sloppy_cleanup() + testloop(socket.AF_INET, udpservers, MyDatagramHandler_NoResponse, testdgram_noresponse) if hasattr(socket, 'AF_UNIX'): sloppy_cleanup() testloop(socket.AF_UNIX, streamservers, MyStreamHandler, teststream)