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メソッドは 1 つの要求のみを処理するため、親プロセスは 1 つの要求のみに応答します。

への呼び出しをhandle_requestループに入れることができます。

それ以外の場合、サーバーの新しいコピーを起動したときに「使用中」エラーが発生するというのは、TCP 2MSL タイマーがタイムアウトするまで待たなければならないためです。これを回避するにSO_REUSEADDRは、リッスン ソケットを設定します。( Set self.allow_reuse_address、どこに設定するかはよくわかりませんが、それを行っていません。)

于 2013-02-07T21:33:44.443 に答える