在我的Python套接字程序中,我有時需要用Ctrl-C來中斷它。當我這樣做時,它會使用socket.close()
關閉連接。Python [Errno 98]地址已經在使用
但是,當我嘗試重新打開它時,我必須等待看起來像是一分鐘之後才能再次連接。如何正確關閉套接字?或者這是打算?
在我的Python套接字程序中,我有時需要用Ctrl-C來中斷它。當我這樣做時,它會使用socket.close()
關閉連接。Python [Errno 98]地址已經在使用
但是,當我嘗試重新打開它時,我必須等待看起來像是一分鐘之後才能再次連接。如何正確關閉套接字?或者這是打算?
是的,它的目的是。在這裏您可以閱讀detailed explanation。可以通過在套接字上設置SO_REUSEADDR選項來覆蓋此行爲。例如:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
如果你的SocketServer模塊中使用TCPSERVER,UDPServer或它們的子類,你可以把這個類變量(instanciating服務器之前):
SocketServer.TCPServer.allow_reuse_address = True
(通過SocketServer.ThreadingTCPServer - Cannot bind to address after program restart)
這導致INIT(構造器),用於:
if self.allow_reuse_address:
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
沒有什麼工作對我來說,除了運行此命令的子進程,HttpServer的調用之前(( '',443),將myHandler):
殺-9 $(lsof的-ti TCP:443)
當然這只是針對類似Linux的操作系統!
奇怪。我在綁定之前調用了它,並且錯誤仍在發生。我必須在其他地方犯錯。 – byxor 2017-02-08 10:25:02
沒關係,當我的自動化測試重複綁定並關閉單獨的線程時,我遇到了一個奇怪的競爭條件。 – byxor 2017-02-08 14:16:12