nginx - 0.1.0 파일 분석 3: ngxsend.c

1423 단어 nginx
함수:
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 이벤트 표시 하고 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 로 표시 합 니 다.

좋은 웹페이지 즐겨찾기