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