diff options
Diffstat (limited to 'src/event/modules/ngx_overlapped_module.c')
| -rw-r--r-- | src/event/modules/ngx_overlapped_module.c | 34 |
1 files changed, 29 insertions, 5 deletions
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 } |
