summaryrefslogtreecommitdiffhomepage
path: root/src/event/modules/ngx_overlapped_module.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/modules/ngx_overlapped_module.c')
-rw-r--r--src/event/modules/ngx_overlapped_module.c34
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
}