2013-10-15 53 views
0

我寫我的兩個班如何停止TCPSERVER,如何刪除TIME_WAIT套接字

class RequestHandler(http.server.SimpleHTTPRequestHandler): 

class Server(socketserver.TCPServer): 

,這樣一個獨特的服務器可以處理常規瀏覽器的,ajax-和WebSocket的請求。 它工作正常。

我只是無法找到終止服務器的方式。所以我殺了這個過程。

[編輯]我需要關閉服務器,當它從瀏覽器收到關機請求。我試圖設置self.__shutdown_request是真的,但它沒有奏效。

除此之外,關閉瀏覽器並終止進程後,netstat告訴我有一些使用服務器端口的套接字 仍處於活動狀態,具有TIME_WAIT狀態。所以我必須等待他們再次使用同一個端口之前死亡。

如何終止服務器?

有沒有辦法刪除這些套接字?

+0

無法幫你解決第一個問題,但爲了避免套接字在TIME_WAIT狀態下掛起,你可以設置SO_LINGER ON,超時時間爲0,如下所示http://stackoverflow.com/questions/6439790/sending- a-reset-in-tcp-ip-socket-connection – fvu

+0

@fvu它的工作原理。謝謝。 – donkeydown

回答

3

可能是您可以嘗試方法Server.shutdown來關閉服務器。正如Python文檔所解釋的,這種方法告訴Server.serve_forever循環停止並等待,直到它結束。 順便說一下,雖然你可以設置SO_LINGER ON以避免TCP套接字的TIME_WAIT狀態,但不鼓勵這樣做。另一種方法是在綁定服務器端口之前設置SO_REUSEADDR。

+0

我已經嘗試過了,我設置了'self .__ shutdown_request' True。 – donkeydown