Dmitrii Tokarev
Dmitrii Tokarev

Reputation: 137

How to know using BaseHTTPRequestHandler that client closed connection

I am writing http server that can serve big files to client.

While writing to wfile stream it is possible that client closes connection and my server gets socket error (Errno 10053).

Is it possible to stop writing when client closes connection?

Upvotes: 2

Views: 2938

Answers (1)

Thanasis Petsas
Thanasis Petsas

Reputation: 4448

You can add these methods to your BaseHTTPRequestHandler class so that you can know if the client closed the connection:

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

In the second method: connection_dropped, you can add some code that you want to be executed each time a socket error (e.g. client closed the connection) occures.

Upvotes: 1

Related Questions