2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 DLL
5 * PURPOSE: Send/receive functions
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/09-2000 Created
25 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
29 WSABuf.buf = (CHAR FAR*)buf;
31 WSARecv(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, NULL, NULL);
45 IN OUT INT FAR* fromlen)
50 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
54 WSABuf.buf = (CHAR FAR*)buf;
56 WSARecvFrom(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, from, fromlen, NULL, NULL);
66 IN CONST CHAR FAR* buf,
73 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
77 WSABuf.buf = (CHAR FAR*)buf;
79 return WSASend(s, &WSABuf, 1, &BytesSent, flags, NULL, NULL);
87 IN CONST CHAR FAR* buf,
90 IN CONST LPSOCKADDR to,
96 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
100 WSABuf.buf = (CHAR FAR*)buf;
102 return WSASendTo(s, &WSABuf, 1, &BytesSent, flags, to, tolen, NULL, NULL);
110 IN OUT LPWSABUF lpBuffers,
111 IN DWORD dwBufferCount,
112 OUT LPDWORD lpNumberOfBytesRecvd,
113 IN OUT LPDWORD lpFlags,
114 IN LPWSAOVERLAPPED lpOverlapped,
115 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
117 PCATALOG_ENTRY Provider;
121 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
123 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
124 WSASetLastError(WSAENOTSOCK);
128 assert(Provider->ProcTable.lpWSPRecv);
130 Code = Provider->ProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount,
131 lpNumberOfBytesRecvd, lpFlags, lpOverlapped,
132 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
134 DereferenceProviderByPointer(Provider);
136 if (Code == SOCKET_ERROR)
137 WSASetLastError(Errno);
147 OUT LPWSABUF lpInboundDisconnectData)
159 IN OUT LPWSABUF lpBuffers,
160 IN DWORD dwBufferCount,
161 OUT LPDWORD lpNumberOfBytesRecvd,
162 IN OUT LPDWORD lpFlags,
163 OUT LPSOCKADDR lpFrom,
164 IN OUT LPINT lpFromlen,
165 IN LPWSAOVERLAPPED lpOverlapped,
166 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
168 PCATALOG_ENTRY Provider;
172 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
174 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
175 WSASetLastError(WSAENOTSOCK);
179 assert(Provider->ProcTable.lpWSPRecvFrom);
181 Code = Provider->ProcTable.lpWSPRecvFrom(s, lpBuffers, dwBufferCount,
182 lpNumberOfBytesRecvd, lpFlags, lpFrom, lpFromlen, lpOverlapped,
183 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
185 DereferenceProviderByPointer(Provider);
187 if (Code == SOCKET_ERROR)
188 WSASetLastError(Errno);
198 IN LPWSABUF lpBuffers,
199 IN DWORD dwBufferCount,
200 OUT LPDWORD lpNumberOfBytesSent,
202 IN LPWSAOVERLAPPED lpOverlapped,
203 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
205 PCATALOG_ENTRY Provider;
209 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
211 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
212 WSASetLastError(WSAENOTSOCK);
216 assert(Provider->ProcTable.lpWSPSend);
218 Code = Provider->ProcTable.lpWSPSend(s, lpBuffers, dwBufferCount,
219 lpNumberOfBytesSent, dwFlags, lpOverlapped,
220 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
222 DereferenceProviderByPointer(Provider);
224 if (Code == SOCKET_ERROR)
225 WSASetLastError(Errno);
235 IN LPWSABUF lpOutboundDisconnectData)
247 IN LPWSABUF lpBuffers,
248 IN DWORD dwBufferCount,
249 OUT LPDWORD lpNumberOfBytesSent,
251 IN CONST LPSOCKADDR lpTo,
253 IN LPWSAOVERLAPPED lpOverlapped,
254 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
256 PCATALOG_ENTRY Provider;
260 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
262 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
263 WSASetLastError(WSAENOTSOCK);
267 assert(Provider->ProcTable.lpWSPSendTo);
269 Code = Provider->ProcTable.lpWSPSendTo(s, lpBuffers, dwBufferCount,
270 lpNumberOfBytesSent, dwFlags, lpTo, iToLen, lpOverlapped,
271 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
273 DereferenceProviderByPointer(Provider);
275 if (Code == SOCKET_ERROR)
276 WSASetLastError(Errno);