From 0c331d9f666b4f9be91009b7caea457e58a80779 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Thu, 15 Aug 2002 17:20:26 +0000 Subject: nginx-0.0.1-2002-08-15-21:20:26 import --- src/event/modules/ngx_overlapped_module.c | 34 ++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'src/event/modules') diff --git a/src/event/modules/ngx_overlapped_module.c b/src/event/modules/ngx_overlapped_module.c index 2bb4d7f69..c3af39dce 100644 --- a/src/event/modules/ngx_overlapped_module.c +++ b/src/event/modules/ngx_overlapped_module.c @@ -1,17 +1,41 @@ + + event = WSACreateEvent(void); + WSAEventSelect(s, event, FD_ACCEPT); + + int ngx_overlapped_process_events(ngx_log_t *log) { if (acceptex) - event = SleepEx(timer, 1); + n = SleepEx(timer, 1); else - event = WSAWaitForMultipleEvents(n_events, events, 0, timer, 1); + n = WSAWaitForMultipleEvents(nevents, events, 0, timer, 1); + + if (n == WSA_WAIT_TIMEOUT) + close some event; + + if (n == WSA_IO_COMPLETION) + again + + /* try it with AcceptEx() on NT to detect connected sockets */ + if (!acceptex) { + WSAEnumNetworkEvents( + sockets[n - WSA_WAIT_EVENT_0], + events[n - WSA_WAIT_EVENT_0], + net_events); + + if (net_events.lNetworkEvents & FD_ACCEPT) { + if (net_events.iErrorCode[FD_ACCEPT_BIT] != 0) + accept error + again - if (event == WSA_IO_COMPLETION) - look ready array + ngx_event_accept(); OR post AcceptEx(); + } + } } void CALLBACK overlapped_completion_procedure(DWORD error, DWORD nbytes, LPWSAOVERLAPPED overlapped, DWORD flags) { - push overlapped; + run event handler } -- cgit