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
29 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
33 WSABuf.buf = (CHAR FAR*)buf;
35 WSARecv(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, NULL, NULL);
52 IN OUT INT FAR* fromlen)
57 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
61 WSABuf.buf = (CHAR FAR*)buf;
63 WSARecvFrom(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, from, fromlen, NULL, NULL);
76 IN CONST CHAR FAR* buf,
83 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
87 WSABuf.buf = (CHAR FAR*)buf;
89 return WSASend(s, &WSABuf, 1, &BytesSent, flags, NULL, NULL);
100 IN CONST CHAR FAR* buf,
103 IN CONST LPSOCKADDR to,
109 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
110 s, buf, len, flags));
113 WSABuf.buf = (CHAR FAR*)buf;
115 return WSASendTo(s, &WSABuf, 1, &BytesSent, flags, to, tolen, NULL, NULL);
126 IN OUT LPWSABUF lpBuffers,
127 IN DWORD dwBufferCount,
128 OUT LPDWORD lpNumberOfBytesRecvd,
129 IN OUT LPDWORD lpFlags,
130 IN LPWSAOVERLAPPED lpOverlapped,
131 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
133 PCATALOG_ENTRY Provider;
137 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
139 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
140 WSASetLastError(WSAENOTSOCK);
144 assert(Provider->ProcTable.lpWSPRecv);
146 Code = Provider->ProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount,
147 lpNumberOfBytesRecvd, lpFlags, lpOverlapped,
148 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
150 DereferenceProviderByPointer(Provider);
152 if (Code == SOCKET_ERROR)
153 WSASetLastError(Errno);
166 OUT LPWSABUF lpInboundDisconnectData)
181 IN OUT LPWSABUF lpBuffers,
182 IN DWORD dwBufferCount,
183 OUT LPDWORD lpNumberOfBytesRecvd,
184 IN OUT LPDWORD lpFlags,
185 OUT LPSOCKADDR lpFrom,
186 IN OUT LPINT lpFromlen,
187 IN LPWSAOVERLAPPED lpOverlapped,
188 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
190 PCATALOG_ENTRY Provider;
194 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
196 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
197 WSASetLastError(WSAENOTSOCK);
201 assert(Provider->ProcTable.lpWSPRecvFrom);
203 Code = Provider->ProcTable.lpWSPRecvFrom(s, lpBuffers, dwBufferCount,
204 lpNumberOfBytesRecvd, lpFlags, lpFrom, lpFromlen, lpOverlapped,
205 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
207 DereferenceProviderByPointer(Provider);
209 if (Code == SOCKET_ERROR)
210 WSASetLastError(Errno);
223 IN LPWSABUF lpBuffers,
224 IN DWORD dwBufferCount,
225 OUT LPDWORD lpNumberOfBytesSent,
227 IN LPWSAOVERLAPPED lpOverlapped,
228 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
230 PCATALOG_ENTRY Provider;
234 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
236 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
237 WSASetLastError(WSAENOTSOCK);
241 assert(Provider->ProcTable.lpWSPSend);
243 Code = Provider->ProcTable.lpWSPSend(s, lpBuffers, dwBufferCount,
244 lpNumberOfBytesSent, dwFlags, lpOverlapped,
245 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
247 DereferenceProviderByPointer(Provider);
249 if (Code == SOCKET_ERROR)
250 WSASetLastError(Errno);
263 IN LPWSABUF lpOutboundDisconnectData)
278 IN LPWSABUF lpBuffers,
279 IN DWORD dwBufferCount,
280 OUT LPDWORD lpNumberOfBytesSent,
282 IN CONST LPSOCKADDR lpTo,
284 IN LPWSAOVERLAPPED lpOverlapped,
285 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
287 PCATALOG_ENTRY Provider;
291 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
293 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
294 WSASetLastError(WSAENOTSOCK);
298 assert(Provider->ProcTable.lpWSPSendTo);
300 Code = Provider->ProcTable.lpWSPSendTo(s, lpBuffers, dwBufferCount,
301 lpNumberOfBytesSent, dwFlags, lpTo, iToLen, lpOverlapped,
302 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
304 DereferenceProviderByPointer(Provider);
306 if (Code == SOCKET_ERROR)
307 WSASetLastError(Errno);