Mercurial > hg > nginx-quic
diff src/os/win32/ngx_wsarecv.c @ 461:a88a3e4e158f release-0.1.5
nginx-0.1.5-RELEASE import
*) Bugfix: on Solaris and Linux there may be too many "recvmsg()
returned not enough data" alerts.
*) Bugfix: there were the "writev() failed (22: Invalid argument)"
errors on Solaris in proxy mode without sendfile. On other platforms
that do not support sendfile at all the process got caught in an
endless loop.
*) Bugfix: segmentation fault on Solaris in proxy mode and using
sendfile.
*) Bugfix: segmentation fault on Solaris.
*) Bugfix: on-line upgrade did not work on Linux.
*) Bugfix: the ngx_http_autoindex_module module did not escape the
spaces, the quotes, and the percent signs in the directory listing.
*) Change: the decrease of the copy operations.
*) Feature: the userid_p3p directive.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 11 Nov 2004 14:07:14 +0000 |
parents | 42d11f017717 |
children | e438ec9e736a |
line wrap: on
line diff
--- a/src/os/win32/ngx_wsarecv.c +++ b/src/os/win32/ngx_wsarecv.c @@ -25,7 +25,7 @@ ssize_t ngx_wsarecv(ngx_connection_t *c, rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL); ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, - "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size); + "WSARecv: fd:%d rc:%d %ul of %z", c->fd, rc, bytes, size); rev = c->read; @@ -85,6 +85,10 @@ ssize_t ngx_overlapped_wsarecv(ngx_conne return NGX_ERROR; } + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, + "WSARecv ovlp: fd:%d %ul of %z", + c->fd, rev->available, size); + return rev->available; } @@ -95,6 +99,9 @@ ssize_t ngx_overlapped_wsarecv(ngx_conne return NGX_ERROR; } + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0, + "WSARecv: fd:%d %ul of %z", c->fd, bytes, size); + return bytes; } @@ -110,12 +117,15 @@ ssize_t ngx_overlapped_wsarecv(ngx_conne rev->complete = 0; ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, - "WSARecv: fd:%d rc:%d %d of %d", c->fd, rc, bytes, size); + "WSARecv ovlp: fd:%d rc:%d %ul of %z", + c->fd, rc, bytes, size); if (rc == -1) { err = ngx_socket_errno; if (err == WSA_IO_PENDING) { rev->active = 1; + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, + "WSARecv() posted"); return NGX_AGAIN; } @@ -148,94 +158,3 @@ ssize_t ngx_overlapped_wsarecv(ngx_conne return bytes; } - -#if 0 - -/* DELELTE IT WHEN ABOVE FUNC WOULD BE TESTED */ - -ssize_t ngx_wsarecv(ngx_connection_t *c, char *buf, size_t size) -{ - int rc; - u_int flags; - size_t bytes; - WSABUF wsabuf[1]; - ngx_err_t err; - ngx_event_t *rev; - LPWSAOVERLAPPED ovlp; - - rev = c->read; - bytes = 0; - - if ((ngx_event_flags & NGX_USE_AIO_EVENT) && rev->ready) { - rev->ready = 0; - - /* the overlapped WSARecv() completed */ - - if (ngx_event_flags & NGX_USE_IOCP_EVENT) { - if (rev->ovlp.error) { - ngx_log_error(NGX_LOG_ERR, c->log, rev->ovlp.error, - "WSARecv() failed"); - return NGX_ERROR; - } - - return rev->available; - } - - if (WSAGetOverlappedResult(c->fd, (LPWSAOVERLAPPED) &rev->ovlp, - &bytes, 0, NULL) == 0) { - err = ngx_socket_errno; - ngx_log_error(NGX_LOG_CRIT, c->log, err, - "WSARecv() or WSAGetOverlappedResult() failed"); - - return NGX_ERROR; - } - - return bytes; - } - - if (ngx_event_flags & NGX_USE_AIO_EVENT) { - ovlp = (LPWSAOVERLAPPED) &c->read->ovlp; - ngx_memzero(ovlp, sizeof(WSAOVERLAPPED)); - - } else { - ovlp = NULL; - } - - wsabuf[0].buf = buf; - wsabuf[0].len = size; - flags = 0; - - rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, ovlp, NULL); - - ngx_log_debug(c->log, "WSARecv: %d:%d" _ rc _ bytes); - - if (rc == -1) { - err = ngx_socket_errno; - if (err == WSA_IO_PENDING) { - return NGX_AGAIN; - - } else if (err == WSAEWOULDBLOCK) { - ngx_log_error(NGX_LOG_INFO, c->log, err, "WSARecv() EAGAIN"); - return NGX_AGAIN; - - } else { - ngx_log_error(NGX_LOG_CRIT, c->log, err, "WSARecv() failed"); - return NGX_ERROR; - } - } - - if (ngx_event_flags & NGX_USE_IOCP_EVENT) { - - /* - * If a socket was bound with I/O completion port - * then GetQueuedCompletionStatus() would anyway return its status - * despite that WSARecv() was already completed. - */ - - return NGX_AGAIN; - } - - return bytes; -} - -#endif