TCP サーバーでソケットを適切に閉じるにはどうすればよいですか?
いくつかの情報をクライアントにエコーバックする単純な TCP サーバーを作成しました。今、私は localhost:8088 でそれを使用killall
し、コードの作業中にいつでも使用を停止して再起動したいと思います。
ただし、すべてのソケットを閉じてアドレスを「解放」するのに問題があるため、すぐにいくつかのテストを行い、コード内の何かを修正してから停止 (Ctrl+C) してサーバーを再起動すると、socket.error: [Errno 98] Address already in use
.
ときsudo netstat -ntap
、まだ127.0.0.1:8088
TIME_WAIT 状態のソケットがいくつか見られます。だから私は彼らが「死ぬ」まで待たなければなりません。
私のテストケース:
#!/usr/bin/python
import SocketServer
class MyEchoHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
# do something smart with the data, but for now, just say hello.
self.reply = "Content-Type: text/plain\r\n\r\nhello."
self.request.send(self.reply)
self.request.close()
def main():
server = SocketServer.TCPServer((HOST, PORT), MyEchoHandler)
server.serve_forever()
if __name__ == '__main__':
HOST, PORT = "localhost", 8088
main()
私は何を間違っていますか?十分ではありませんself.request.close()
か?
Python 2.7.3 の Debian でこれを試していますが、Python 2.6 でも Squeeze をサポートする必要があります。