2013-10-15 18 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