⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_aio_read_chain.c

📁 nginx 反向代理0.7.1版本 用于实现反向代理
💻 C
字号:
/* * Copyright (C) Igor Sysoev */#include <ngx_config.h>#include <ngx_core.h>#include <ngx_event.h>#include <ngx_aio.h>ssize_tngx_aio_read_chain(ngx_connection_t *c, ngx_chain_t *cl){    int           n;    u_char       *buf, *prev;    size_t        size;    ssize_t       total;    if (c->read->pending_eof) {        c->read->ready = 0;        return 0;    }    total = 0;    while (cl) {        /* we can post the single aio operation only */        if (!c->read->ready) {            return total ? total : NGX_AGAIN;        }        buf = cl->buf->last;        prev = cl->buf->last;        size = 0;        /* coalesce the neighbouring bufs */        while (cl && prev == cl->buf->last) {            size += cl->buf->end - cl->buf->last;            prev = cl->buf->end;            cl = cl->next;        }        n = ngx_aio_read(c, buf, size);        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "aio_read: %d", n);        if (n == NGX_AGAIN) {            return total ? total : NGX_AGAIN;        }        if (n == NGX_ERROR) {            return NGX_ERROR;        }        if (n == 0) {            c->read->pending_eof = 1;            if (total) {                c->read->eof = 0;                c->read->ready = 1;            }            return total;        }        if (n > 0) {            total += n;        }        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,                       "aio_read total: %d", total);    }    return total ? total : NGX_AGAIN;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -