2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 DLL
5 * PURPOSE: Event handling
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/09-2000 Created
24 if (!WSAINITIALIZED
) {
25 WSASetLastError(WSANOTINITIALISED
);
29 Success
= CloseHandle((HANDLE
)hEvent
);
32 WSASetLastError(WSA_INVALID_HANDLE
);
47 if (!WSAINITIALIZED
) {
48 WSASetLastError(WSANOTINITIALISED
);
52 Event
= CreateEventW(NULL
, TRUE
, FALSE
, NULL
);
54 if (Event
== INVALID_HANDLE_VALUE
)
55 WSASetLastError(WSA_INVALID_HANDLE
);
57 return (WSAEVENT
)Event
;
71 if (!WSAINITIALIZED
) {
72 WSASetLastError(WSANOTINITIALISED
);
76 Success
= ResetEvent((HANDLE
)hEvent
);
79 WSASetLastError(WSA_INVALID_HANDLE
);
95 if (!WSAINITIALIZED
) {
96 WSASetLastError(WSANOTINITIALISED
);
100 Success
= SetEvent((HANDLE
)hEvent
);
103 WSASetLastError(WSA_INVALID_HANDLE
);
114 WSAWaitForMultipleEvents(
116 IN CONST WSAEVENT FAR
* lphEvents
,
123 if (!WSAINITIALIZED
) {
124 WSASetLastError(WSANOTINITIALISED
);
128 Status
= WaitForMultipleObjectsEx(cEvents
, lphEvents
, fWaitAll
, dwTimeout
, fAlertable
);
129 if (Status
== WAIT_FAILED
) {
130 Status
= GetLastError();
132 if (Status
== ERROR_NOT_ENOUGH_MEMORY
)
133 WSASetLastError(WSA_NOT_ENOUGH_MEMORY
);
134 else if (Status
== ERROR_INVALID_HANDLE
)
135 WSASetLastError(WSA_INVALID_HANDLE
);
137 WSASetLastError(WSA_INVALID_PARAMETER
);
139 return WSA_WAIT_FAILED
;
151 WSAEnumNetworkEvents(
153 IN WSAEVENT hEventObject
,
154 OUT LPWSANETWORKEVENTS lpNetworkEvents
)
156 PCATALOG_ENTRY Provider
;
160 WS_DbgPrint(MID_TRACE
,("Called (Socket %x, hEventObject %x, "
161 "lpNetworkEvents %x)\n",
162 s
, hEventObject
, lpNetworkEvents
));
164 if (!lpNetworkEvents
) {
165 WSASetLastError(WSAEINVAL
);
169 if (!WSAINITIALIZED
) {
170 WSASetLastError(WSANOTINITIALISED
);
174 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
175 WSASetLastError(WSAENOTSOCK
);
179 Status
= Provider
->ProcTable
.lpWSPEnumNetworkEvents(
180 s
, hEventObject
, lpNetworkEvents
, &Errno
);
182 DereferenceProviderByPointer(Provider
);
184 if (Status
== SOCKET_ERROR
)
185 WSASetLastError(Errno
);
187 WS_DbgPrint(MID_TRACE
,("Leaving %x\n", Status
));
200 IN WSAEVENT hEventObject
,
201 IN LONG lNetworkEvents
)
203 PCATALOG_ENTRY Provider
;
207 if (!WSAINITIALIZED
) {
208 WSASetLastError(WSANOTINITIALISED
);
212 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
213 WSASetLastError(WSAENOTSOCK
);
217 Status
= Provider
->ProcTable
.lpWSPEventSelect(
218 s
, hEventObject
, lNetworkEvents
, &Errno
);
220 DereferenceProviderByPointer(Provider
);
222 if (Status
== SOCKET_ERROR
)
223 WSASetLastError(Errno
);