- New winsock (part 4 of x)
[reactos.git] / dll / win32 / ws2_32 / src / event.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 API
4 * FILE: event.c
5 * PURPOSE: Socket Events
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9 /* INCLUDES ******************************************************************/
10 #include "ws2_32.h"
11
12 //#define NDEBUG
13 #include <debug.h>
14
15 /* FUNCTIONS *****************************************************************/
16
17 /*
18 * @implemented
19 */
20 BOOL
21 WSAAPI
22 WSACloseEvent(IN WSAEVENT hEvent)
23 {
24 BOOL Success;
25
26 /* Let the OS handle it */
27 Success = CloseHandle(hEvent);
28
29 /* We need a special WSA return error */
30 if (!Success) WSASetLastError(WSA_INVALID_HANDLE);
31
32 /* Return the Win32 Error */
33 return Success;
34 }
35
36 /*
37 * @implemented
38 */
39 WSAEVENT
40 WSAAPI
41 WSACreateEvent(VOID)
42 {
43 /* CreateEventW can only return the Event or 0 (WSA_INVALID_EVENT) */
44 return CreateEventW(NULL, TRUE, FALSE, NULL);
45 }
46
47 /*
48 * @implemented
49 */
50 BOOL
51 WSAAPI
52 WSAResetEvent(IN WSAEVENT hEvent)
53 {
54 /* Call Win32 */
55 return ResetEvent(hEvent);
56 }
57
58 /*
59 * @implemented
60 */
61 BOOL
62 WSAAPI
63 WSASetEvent(IN WSAEVENT hEvent)
64 {
65 /* Call Win32 */
66 return SetEvent(hEvent);
67 }
68
69 /*
70 * @implemented
71 */
72 DWORD
73 WSAAPI
74 WSAWaitForMultipleEvents(IN DWORD cEvents,
75 IN CONST WSAEVENT FAR* lphEvents,
76 IN BOOL fWaitAll,
77 IN DWORD dwTimeout,
78 IN BOOL fAlertable)
79 {
80 /* Call Win32 */
81 return WaitForMultipleObjectsEx(cEvents,
82 lphEvents,
83 fWaitAll,
84 dwTimeout,
85 fAlertable);
86 }
87
88 /*
89 * @implemented
90 */
91 INT
92 WSAAPI
93 WSAEnumNetworkEvents(IN SOCKET s,
94 IN WSAEVENT hEventObject,
95 OUT LPWSANETWORKEVENTS lpNetworkEvents)
96 {
97 PWSSOCKET Socket;
98 INT Status;
99 INT ErrorCode;
100 DPRINT("WSAEnumNetworkEvents: %lx\n", s);
101
102 /* Check for WSAStartup */
103 if ((ErrorCode = WsQuickProlog()) == ERROR_SUCCESS)
104 {
105 /* Get the Socket Context */
106 if ((Socket = WsSockGetSocket(s)))
107 {
108 /* Make the call */
109 Status = Socket->Provider->Service.lpWSPEnumNetworkEvents(s,
110 hEventObject,
111 lpNetworkEvents,
112 &ErrorCode);
113 /* Deference the Socket Context */
114 WsSockDereference(Socket);
115
116 /* Return Provider Value */
117 if (Status == ERROR_SUCCESS) return Status;
118 }
119 else
120 {
121 /* No Socket Context Found */
122 ErrorCode = WSAENOTSOCK;
123 }
124 }
125
126 /* Return with an Error */
127 SetLastError(ErrorCode);
128 return SOCKET_ERROR;
129 }
130