| event = WSACreateEvent(void); | |
| WSAEventSelect(s, event, FD_ACCEPT); | |
| int ngx_overlapped_process_events(ngx_log_t *log) | |
| { | |
| if (acceptex) | |
| n = SleepEx(timer, 1); | |
| else | |
| 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 | |
| ngx_event_accept(); OR post AcceptEx(); | |
| } | |
| } | |
| } | |
| void CALLBACK overlapped_completion_procedure(DWORD error, DWORD nbytes, | |
| LPWSAOVERLAPPED overlapped, DWORD flags) | |
| { | |
| run event handler | |
| } |