2012-03-29 1 views
2

Я пишу http-сервер, который может обслуживать большие файлы для клиента.Как узнать, используя BaseHTTPRequestHandler, что клиент закрыл соединение

Во время записи в поток wfile возможно, что клиент закрывает соединение, и мой сервер получает ошибку сокета (Errno 10053).

Можно ли прекратить запись, когда клиент закрывает соединение?

ответ

1

Вы можете добавить эти методы к вашему BaseHTTPRequestHandler класса, так что вы можете знать, если клиент закрыл соединение:

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 

Во втором методе: connection_dropped, вы можете добавить некоторый код, который вам хотят выполняться каждый раз, когда происходит ошибка сокета (например, клиент закрыл соединение).

+0

Благодарим вас за советы. –

+0

рад, что я могу помочь! Добро пожаловать в Stackoverflow! :) –

+0

socket.error вызывается только при отправке данных клиенту (self.wfile.write). Вы знаете какой-либо способ определить, нарушена ли труба, не пытаясь отправить что-нибудь? –