Mercurial > hg > nginx
view src/os/unix/ngx_udp_send.c @ 7838:815c63581be4
Mail: POP3 pipelining support.
The change is mostly the same as the SMTP one (04e43d03e153 and 3f5d0af4e40a),
and ensures that nginx is able to properly handle or reject multiple POP3
commands, as required by the PIPELINING capability (RFC 2449). The s->cmd
field is not really used and set for consistency.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 19 May 2021 03:13:18 +0300 |
parents | 8f038068f4bc |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_event.h> ssize_t ngx_udp_unix_send(ngx_connection_t *c, u_char *buf, size_t size) { ssize_t n; ngx_err_t err; ngx_event_t *wev; wev = c->write; for ( ;; ) { n = sendto(c->fd, buf, size, 0, c->sockaddr, c->socklen); ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, "sendto: fd:%d %z of %uz to \"%V\"", c->fd, n, size, &c->addr_text); if (n >= 0) { if ((size_t) n != size) { wev->error = 1; (void) ngx_connection_error(c, 0, "sendto() incomplete"); return NGX_ERROR; } c->sent += n; return n; } err = ngx_socket_errno; if (err == NGX_EAGAIN) { wev->ready = 0; ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, NGX_EAGAIN, "sendto() not ready"); return NGX_AGAIN; } if (err != NGX_EINTR) { wev->error = 1; (void) ngx_connection_error(c, err, "sendto() failed"); return NGX_ERROR; } } }