Как узнать с помощью BaseHTTPRequestHandler, что клиент закрыл соединение - PullRequest
2 голосов
/ 29 марта 2012

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

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

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

1 Ответ

1 голос
/ 30 марта 2012

Вы можете добавить эти методы в ваш 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 , вы можете добавить некоторый код, который вы хотите выполнять каждый раз, когда происходит ошибка сокета (например, клиент закрыл соединение).

...