Я создал простое тестовое приложение (Python 2.6.1), которое запускает ThreadingTCPServer на основе примера здесь . Если клиент отправляет команду «пока», я хочу выключить сервер и выйти из приложения. Часть выхода работает нормально, но когда я пытаюсь перезапустить приложение, я получаю:
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.")