函数:
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.