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

📄 ngx_aio_write_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>ngx_chain_t *ngx_aio_write_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit){    u_char       *buf, *prev;    off_t         send, sent;    size_t        len;    ssize_t       n, size;    ngx_chain_t  *cl;    /* the maximum limit size is the maximum size_t value - the page size */    if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {        limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;    }    send = 0;    sent = 0;    cl = in;    while (cl) {        if (cl->buf->pos == cl->buf->last) {            cl = cl->next;            continue;        }        /* we can post the single aio operation only */        if (!c->write->ready) {            return cl;        }        buf = cl->buf->pos;        prev = buf;        len = 0;        /* coalesce the neighbouring bufs */        while (cl && prev == cl->buf->pos && send < limit) {            if (ngx_buf_special(cl->buf)) {                continue;            }            size = cl->buf->last - cl->buf->pos;            if (send + size > limit) {                size = limit - send;            }            len += size;            prev = cl->buf->pos + size;            send += size;            cl = cl->next;        }        n = ngx_aio_write(c, buf, len);        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "aio_write: %z", n);        if (n == NGX_ERROR) {            return NGX_CHAIN_ERROR;        }        if (n > 0) {            sent += n;            c->sent += n;        }        ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,                       "aio_write sent: %O", c->sent);        for (cl = in; cl; cl = cl->next) {            if (sent >= cl->buf->last - cl->buf->pos) {                sent -= cl->buf->last - cl->buf->pos;                cl->buf->pos = cl->buf->last;                continue;            }            cl->buf->pos += sent;            break;        }    }    return cl;}

⌨️ 快捷键说明

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