diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2002-08-15 17:20:26 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2002-08-15 17:20:26 +0000 |
| commit | 0c331d9f666b4f9be91009b7caea457e58a80779 (patch) | |
| tree | d48221581b361ee5b0ccad46e4df49caa41b1bba /src/event/modules/ngx_overlapped_module.c | |
| parent | 6de5c2cb63f8aee4bcbec3c363a72fd8e4a4e64d (diff) | |
| download | nginx-0c331d9f666b4f9be91009b7caea457e58a80779.tar.gz nginx-0c331d9f666b4f9be91009b7caea457e58a80779.tar.bz2 | |
nginx-0.0.1-2002-08-15-21:20:26 import
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 } |
