【问题标题】:Releasing socket from SocketServer.ForkingTCPServer python从 SocketServer.ForkingTCPServer python 释放套接字
【发布时间】:2013-02-07 19:27:53
【问题描述】:

我正在创建一个 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()

【问题讨论】:

    标签: python sockets socketserver simplehttpserver


    【解决方案1】:

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

    您可以循环调用handle_request

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多