Как узнать с помощью BaseHTTPRequestHandler, что клиент закрыл соединение

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

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

Другие вопросы по тегам