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
24 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
28 WSABuf.buf = (CHAR FAR*)buf;
30 WSARecv(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, NULL, NULL);
44 IN OUT INT FAR* fromlen)
49 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
53 WSABuf.buf = (CHAR FAR*)buf;
55 WSARecvFrom(s, &WSABuf, 1, &BytesReceived, (LPDWORD)&flags, from, fromlen, NULL, NULL);
65 IN CONST CHAR FAR* buf,
72 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
76 WSABuf.buf = (CHAR FAR*)buf;
78 return WSASend(s, &WSABuf, 1, &BytesSent, flags, NULL, NULL);
86 IN CONST CHAR FAR* buf,
89 IN CONST LPSOCKADDR to,
95 WS_DbgPrint(MAX_TRACE, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
99 WSABuf.buf = (CHAR FAR*)buf;
101 return WSASendTo(s, &WSABuf, 1, &BytesSent, flags, to, tolen, NULL, NULL);
109 IN OUT LPWSABUF lpBuffers,
110 IN DWORD dwBufferCount,
111 OUT LPDWORD lpNumberOfBytesRecvd,
112 IN OUT LPDWORD lpFlags,
113 IN LPWSAOVERLAPPED lpOverlapped,
114 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
116 PCATALOG_ENTRY Provider;
120 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
122 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
123 WSASetLastError(WSAENOTSOCK);
127 assert(Provider->ProcTable.lpWSPRecv);
129 Code = Provider->ProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount,
130 lpNumberOfBytesRecvd, lpFlags, lpOverlapped,
131 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
133 DereferenceProviderByPointer(Provider);
135 if (Code == SOCKET_ERROR)
136 WSASetLastError(Errno);
146 OUT LPWSABUF lpInboundDisconnectData)
158 IN OUT LPWSABUF lpBuffers,
159 IN DWORD dwBufferCount,
160 OUT LPDWORD lpNumberOfBytesRecvd,
161 IN OUT LPDWORD lpFlags,
162 OUT LPSOCKADDR lpFrom,
163 IN OUT LPINT lpFromlen,
164 IN LPWSAOVERLAPPED lpOverlapped,
165 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
167 PCATALOG_ENTRY Provider;
171 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
173 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
174 WSASetLastError(WSAENOTSOCK);
178 assert(Provider->ProcTable.lpWSPRecvFrom);
180 Code = Provider->ProcTable.lpWSPRecvFrom(s, lpBuffers, dwBufferCount,
181 lpNumberOfBytesRecvd, lpFlags, lpFrom, lpFromlen, lpOverlapped,
182 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
184 DereferenceProviderByPointer(Provider);
186 if (Code == SOCKET_ERROR)
187 WSASetLastError(Errno);
197 IN LPWSABUF lpBuffers,
198 IN DWORD dwBufferCount,
199 OUT LPDWORD lpNumberOfBytesSent,
201 IN LPWSAOVERLAPPED lpOverlapped,
202 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
204 PCATALOG_ENTRY Provider;
208 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
210 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
211 WSASetLastError(WSAENOTSOCK);
215 assert(Provider->ProcTable.lpWSPSend);
217 Code = Provider->ProcTable.lpWSPSend(s, lpBuffers, dwBufferCount,
218 lpNumberOfBytesSent, dwFlags, lpOverlapped,
219 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
221 DereferenceProviderByPointer(Provider);
223 if (Code == SOCKET_ERROR)
224 WSASetLastError(Errno);
234 IN LPWSABUF lpOutboundDisconnectData)
246 IN LPWSABUF lpBuffers,
247 IN DWORD dwBufferCount,
248 OUT LPDWORD lpNumberOfBytesSent,
250 IN CONST LPSOCKADDR lpTo,
252 IN LPWSAOVERLAPPED lpOverlapped,
253 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
255 PCATALOG_ENTRY Provider;
259 WS_DbgPrint(MAX_TRACE, ("Called.\n"));
261 if (!ReferenceProviderByHandle((HANDLE)s, &Provider)) {
262 WSASetLastError(WSAENOTSOCK);
266 assert(Provider->ProcTable.lpWSPSendTo);
268 Code = Provider->ProcTable.lpWSPSendTo(s, lpBuffers, dwBufferCount,
269 lpNumberOfBytesSent, dwFlags, lpTo, iToLen, lpOverlapped,
270 lpCompletionRoutine, NULL /* lpThreadId */, &Errno);
272 DereferenceProviderByPointer(Provider);
274 if (Code == SOCKET_ERROR)
275 WSASetLastError(Errno);