in net/http/server.cpp [108:159]
int handle_connection(net::ISocketStream* sock) override {
m_workers++;
DEFER(m_workers--);
SockItem sock_item(sock);
{
SCOPED_LOCK(m_connection_list_lock);
m_connection_list.push_back(&sock_item);
}
DEFER({
SCOPED_LOCK(m_connection_list_lock);
m_connection_list.erase(&sock_item);
});
char req_buf[64*1024];
char resp_buf[64*1024];
Request req(req_buf, 64*1024-1);
Response resp(resp_buf, 64*1024-1);
while (status == Status::running) {
req.reset(sock, false);
auto rec_ret = req.receive_header();
if (rec_ret < 0) {
LOG_ERROR_RETURN(0, -1, "read request header failed");
}
if (rec_ret == 1) {
LOG_DEBUG("exit");
return -1;
}
LOG_DEBUG("Request Accepted", VALUE(req.verb()), VALUE(req.target()), VALUE(req.headers["Authorization"]));
resp.reset(sock, false);
resp.keep_alive(req.keep_alive());
auto ret = mux_handler(req, resp);
if (ret < 0) {
LOG_ERROR_RETURN(0, -1, "handler error ", VALUE(req.verb()), VALUE(req.target()));
}
if (resp.send() < 0) {
LOG_ERROR_RETURN(0, -1, "failed to send");
}
if (!resp.keep_alive())
break;
if (req.skip_remain() < 0)
break;
}
return 0;
}