static void server_close_stats(struct context *ctx, struct server *server, err_t err, unsigned eof, unsigned connected) { if (connected) { stats_server_decr(ctx, server, server_connections); } if (eof) { stats_server_incr(ctx, server, server_eof); return; } switch (err) { case ETIMEDOUT: stats_server_incr(ctx, server, server_timedout); break; case EPIPE: case ECONNRESET: case ECONNABORTED: case ECONNREFUSED: case ENOTCONN: case ENETDOWN: case ENETUNREACH: case EHOSTDOWN: case EHOSTUNREACH: default: stats_server_incr(ctx, server, server_err); break; } }
void req_server_dequeue_imsgq(struct context *ctx, struct conn *conn, struct msg *msg) { ASSERT(msg->request); ASSERT(!conn->client && !conn->proxy); TAILQ_REMOVE(&conn->imsg_q, msg, s_tqe); stats_server_decr(ctx, conn->owner, in_queue); stats_server_decr_by(ctx, conn->owner, in_queue_bytes, msg->mlen); }
void req_server_dequeue_imsgq(struct context *ctx, struct conn *conn, struct msg *msg) {//req_send_done中执行 把msg从imsg_q队列中脱离开来,不在是imsg_q队列中的成员。表示该msg已经发送给了后端服务器 ASSERT(msg->request); ASSERT(!conn->client && !conn->proxy); TAILQ_REMOVE(&conn->imsg_q, msg, s_tqe); stats_server_decr(ctx, conn->owner, in_queue); stats_server_decr_by(ctx, conn->owner, in_queue_bytes, msg->mlen); }