2013-02-07 3 views
1

프록시로 작동하도록 ForkingTCPServer를 생성 중입니다. 완벽하게 처리되지만 실행 후 소켓을 해제하지는 않습니다. 나는 이미 .shutdown().server_close()을 시도했지만 프로그램이 멈추게 만듭니다. 어떻게 다시 사용할 수 있도록 소켓을 해제 할 수 있습니까?소켓을 SocketServer.ForkingTCPServer에서 해제 Python

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() 

답변

2

handle_request 메서드는 하나의 요청 만 처리하므로 부모 프로세스는 하나의 요청에만 응답합니다.

handle_request에 전화를 걸 수 있습니다.

그렇지 않으면 TCP 2MSL 타이머가 시간 초과 될 때까지 기다려야하기 때문에 서버의 새 복사본을 시작할 때 "사용 중"오류가 발생한다는 의미입니다. 이 문제를 해결하려면 청취 소켓에 SO_REUSEADDR을 설정하십시오. (설정하지 않아도되는데, 어디서 설정해야하는지 잘 모르겠지만 self.allow_reuse_address을 설정하십시오.)