
#include <ngx_core.h>
#include <ngx_types.h>
#include <ngx_errno.h>
#include <ngx_connection.h>
#include <ngx_log.h>
#include <ngx_sendv.h>

ssize_t ngx_sendv(ngx_connection_t *c, ngx_iovec_t *iovec, int n)
{
     ssize_t rc;
     ngx_err_t err;

     rc = writev(c->fd, iovec, n);

     if (rc == -1) {
         err = ngx_socket_errno;
         if (err == NGX_EAGAIN) {
             ngx_log_error(NGX_LOG_INFO, c->log, err, "sendv() eagain");
             return NGX_AGAIN;
         }

         ngx_log_error(NGX_LOG_ERR, c->log, err, "sendv() failed");
         return NGX_ERROR;
     }

     return rc;
}
