1

我正在创建一个 ForkingTCPServer 来充当代理。它处理得很好,但执行后不会释放套接字。我已经尝试过.shutdown().server_close()但它们只会导致程序冻结。如何释放套接字以便再次使用?

import SocketServer
import SimpleHTTPServer
import urllib

PORT = 8080

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen("http://"+self.path[1:]), self.wfile)

httpd = SocketServer.ForkingTCPServer(('', PORT), Proxy)
print "serving at port", PORT
httpd.handle_request()
4

1 回答 1

2

handle_request方法只处理一个请求,因此父进程只响应一个请求。

您可以将调用handle_request置于循环中。

否则,如果您的意思是在启动服务器的新副本时收到“正在使用”错误,那是因为您必须等待 TCP 2MSL 计时器超时。要解决此问题,SO_REUSEADDR请在侦听套接字上进行设置。(设置self.allow_reuse_address,虽然我不太确定在哪里设置它,但还没有这样做。)

于 2013-02-07T21:33:44.443 回答