nginx-0.1.0文件分析3:ngx_send.c

函数:

ngx_unix_send

解析:

for ( ;; ) {
        n = send(c->fd, buf, size, 0);

通过send函数发送缓冲区里的内容。注意:

send仅仅是把buf中的数据copy到套接字sockfd的发送缓冲区的剩余空间里)。

接下来是:

if (n > 0) {
            if (n < (ssize_t) size) {
                wev->ready = 0;
            }

            return n;
}

意思是:如果确实发送出去了若干字符,分情况:

1)发送了部分,设置wev->ready为0,表示还需要再发送数据

2)全部发送完,不设置。

返回实际发送的个数。

 

if (n == 0) {
            ngx_log_error(NGX_LOG_ALERT, c->log, err, "send() returned zero");
            wev->ready = 0;
            return n;
        }

如果n等于0,

标记一下write event,返回0

 

~~~剩下就是错误了。

if (err == NGX_EAGAIN || err == NGX_EINTR) {
            wev->ready = 0;

            ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
                           "send() not ready");

            if (err == NGX_EAGAIN) {
                return NGX_AGAIN;
            }

        } else {
            wev->error = 1;
            ngx_connection_error(c, err, "recv() failed");
            return NGX_ERROR;
        }

如果是信号中断或者其它问题导致的非严重错误,则标记写事件。

如果是真的错误,则标记写事件的error为1.

转载于:https://my.oschina.net/qiangzigege/blog/194033

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值