2012-03-29 4 views
2

큰 파일을 클라이언트에 제공 할 수있는 http 서버를 작성 중입니다.BaseHTTPRequestHandler를 사용하여 클라이언트가 연결을 닫는 방법 알아보기

wfile 스트림에 쓰는 동안 클라이언트가 연결을 닫고 서버에 소켓 오류가 발생할 수 있습니다 (Errno 10053).

클라이언트가 연결을 닫을 때 쓰기를 중지 할 수 있습니까?

def handle(self): 
    """Handles a request ignoring dropped connections.""" 
    try: 
     return BaseHTTPRequestHandler.handle(self) 
    except (socket.error, socket.timeout) as e: 
     self.connection_dropped(e) 

def connection_dropped(self, error, environ=None): 
    """Called if the connection was closed by the client. By default 
    nothing happens. 
    """ 
    # add here the code you want to be executed if a connection 
    # was closed by the client 

두 번째 방법은 : 클라이언트가 연결이 닫혀 있는지 알 수 있도록

답변

1

당신은 당신의 BaseHTTPRequestHandler에 클래스를 이러한 방법을 추가 할 수 있습니다 을 connection_dropped를 당신은 몇 가지 코드를 추가 할 수 있습니다, 당신을 소켓 오류 (예 : 클라이언트 연결 끊김)가 발생할 때마다 실행되기를 원합니다.

+0

감사합니다. –

+0

기꺼이 도와 드리겠습니다! Stackoverflow에 오신 것을 환영합니다 !! :) –

+0

socket.error는 클라이언트에 데이터를 보낼 때만 throw됩니다 (self.wfile.write). 파이프를 보내지 않고 파이프가 파손되었는지 확인하는 방법을 알고 있습니까? –