こちらの例に基づいて、ThreadingTCPServer を実行する簡単なテスト アプリ (Python 2.6.1) を作成しました。クライアントがコマンド「さようなら」を送信した場合、サーバーをシャットダウンして、アプリケーションを正常に終了したいと考えています。終了部分は問題なく動作しますが、アプリを再実行しようとすると、次のようになります。
socket.error: [Errno 48] Address already in use
ソケットオプションを設定するためにここに示されている解決策を試しましたが、役に立たなかったようです。サーバーをシャットダウンするさまざまな方法を試しましたが、常に同じエラーが発生します。
私が間違っていることは何か分かりますか?
import SocketServer
import socket
import sys
import threading
import time
class RequestHandler(SocketServer.BaseRequestHandler):
def setup(self):
print("Connection received from %s" % str(self.client_address))
self.request.send("Welcome!\n")
def handle(self):
while 1:
data = self.request.recv(1024)
if (data.strip() == 'bye'):
print("Leaving server.")
self.finish()
self.server.shutdown()
# None of these things seem to work either
#time.sleep(2)
#del self.server.socket
#self.server.socket.shutdown(socket.SHUT_WR)
#self.server.socket.close()
#self.server.server_close()
break
def finish(self):
self.request.send("Goodbye! Please come back soon.")
if __name__ == "__main__":
server = SocketServer.ThreadingTCPServer(("localhost", 9999), RequestHandler)
# This doesn't seem to help.
#server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
#server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.serve_forever()
print("Exiting program.")