def METHOD_NAME(self, listener, client, addr):
    req = None
    try:
        parser = http.RequestParser(self.cfg, client, addr)
        try:
            listener_name = listener.getsockname()
            if not self.cfg.keepalive:
                req = next(parser)
                self.handle_request(listener_name, req, client, addr)
            else:
                # keepalive loop
                proxy_protocol_info = {}
                while True:
                    req = None
                    with self.timeout_ctx():
                        req = next(parser)
                    if not req:
                        break
                    if req.proxy_protocol_info:
                        proxy_protocol_info = req.proxy_protocol_info
                    else:
                        req.proxy_protocol_info = proxy_protocol_info
                    self.handle_request(listener_name, req, client, addr)
        except http.errors.NoMoreData as e:
            self.log.debug("Ignored premature client disconnection. %s", e)
        except StopIteration as e:
            self.log.debug("Closing connection. %s", e)
        except ssl.SSLError:
            # pass to next try-except level
            util.reraise(*sys.exc_info())
        except EnvironmentError:
            # pass to next try-except level
            util.reraise(*sys.exc_info())
        except Exception as e:
            self.handle_error(req, client, addr, e)
    except ssl.SSLError as e:
        if e.args[0] == ssl.SSL_ERROR_EOF:
            self.log.debug("ssl connection closed")
            client.close()
        else:
            self.log.debug("Error processing SSL request.")
            self.handle_error(req, client, addr, e)
    except EnvironmentError as e:
        if e.errno not in (errno.EPIPE, errno.ECONNRESET, errno.ENOTCONN):
            self.log.exception("Socket error processing request.")
        else:
            if e.errno == errno.ECONNRESET:
                self.log.debug("Ignoring connection reset")
            elif e.errno == errno.ENOTCONN:
                self.log.debug("Ignoring socket not connected")
            else:
                self.log.debug("Ignoring EPIPE")
    except Exception as e:
        self.handle_error(req, client, addr, e)
    finally:
        util.close(client)