src/os/win32/ngx_udp_wsarecv.c - nginx-1.31.9 nginx/ @ 2a3a19c6f

Functions defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #include <ngx_config.h>
  6. #include <ngx_core.h>
  7. #include <ngx_event.h>


  8. ssize_t
  9. ‌ngx_udp_wsarecv(ngx_connection_t *c, u_char *buf, size_t size)
  10. {
  11.     int           rc;
  12.     u_long        bytes, flags;
  13.     WSABUF        wsabuf[1];
  14.     ngx_err_t     err;
  15.     ngx_event_t  *rev;

  16.     wsabuf[0].buf = (char *) buf;
  17.     wsabuf[0].len = size;
  18.     flags = 0;
  19.     bytes = 0;

  20.     rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);

  21.     ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
  22.                    "WSARecv: fd:%d rc:%d %ul of %z", c->fd, rc, bytes, size);

  23.     rev = c->read;

  24.     if (rc == -1) {
  25.         rev->ready = 0;
  26.         err = ngx_socket_errno;

  27.         if (err == WSAEWOULDBLOCK) {
  28.             ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
  29.                            "WSARecv() not ready");
  30.             return NGX_AGAIN;
  31.         }

  32.         rev->error = 1;
  33.         ngx_connection_error(c, err, "WSARecv() failed");

  34.         return NGX_ERROR;
  35.     }

  36.     return bytes;
  37. }