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
31 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
38 WSABuf
.buf
= (CHAR FAR
*)buf
;
65 IN OUT INT FAR
* fromlen
)
71 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
78 WSABuf
.buf
= (CHAR FAR
*)buf
;
80 Error
= WSARecvFrom(s
,
103 IN CONST CHAR FAR
* buf
,
111 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
118 WSABuf
.buf
= (CHAR FAR
*)buf
;
130 WS_DbgPrint(MAX_TRACE
,("Reporting error %d\n", Error
));
135 WS_DbgPrint(MAX_TRACE
,("Read %d bytes\n", BytesSent
));
147 IN CONST CHAR FAR
* buf
,
150 IN CONST
struct sockaddr
*to
,
157 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
164 WSABuf
.buf
= (CHAR FAR
*)buf
;
189 IN OUT LPWSABUF lpBuffers
,
190 IN DWORD dwBufferCount
,
191 OUT LPDWORD lpNumberOfBytesRecvd
,
192 IN OUT LPDWORD lpFlags
,
193 IN LPWSAOVERLAPPED lpOverlapped
,
194 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
196 PCATALOG_ENTRY Provider
;
200 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
202 if (!ReferenceProviderByHandle((HANDLE
)s
,
205 WSASetLastError(WSAENOTSOCK
);
209 assert(Provider
->ProcTable
.lpWSPRecv
);
211 Code
= Provider
->ProcTable
.lpWSPRecv(s
,
214 lpNumberOfBytesRecvd
,
218 NULL
/* lpThreadId */,
221 DereferenceProviderByPointer(Provider
);
223 if (Code
== SOCKET_ERROR
)
224 WSASetLastError(Errno
);
235 WSARecvDisconnect(IN SOCKET s
,
236 OUT LPWSABUF lpInboundDisconnectData
)
249 WSARecvFrom(IN SOCKET s
,
250 IN OUT LPWSABUF lpBuffers
,
251 IN DWORD dwBufferCount
,
252 OUT LPDWORD lpNumberOfBytesRecvd
,
253 IN OUT LPDWORD lpFlags
,
254 OUT LPSOCKADDR lpFrom
,
255 IN OUT LPINT lpFromlen
,
256 IN LPWSAOVERLAPPED lpOverlapped
,
257 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
259 PCATALOG_ENTRY Provider
;
263 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
265 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
267 WSASetLastError(WSAENOTSOCK
);
271 assert(Provider
->ProcTable
.lpWSPRecvFrom
);
273 Code
= Provider
->ProcTable
.lpWSPRecvFrom(s
,
276 lpNumberOfBytesRecvd
,
282 NULL
/* lpThreadId */,
285 DereferenceProviderByPointer(Provider
);
287 if (Code
== SOCKET_ERROR
)
288 WSASetLastError(Errno
);
300 IN LPWSABUF lpBuffers
,
301 IN DWORD dwBufferCount
,
302 OUT LPDWORD lpNumberOfBytesSent
,
304 IN LPWSAOVERLAPPED lpOverlapped
,
305 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
307 PCATALOG_ENTRY Provider
;
311 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
313 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
315 WSASetLastError(WSAENOTSOCK
);
319 assert(Provider
->ProcTable
.lpWSPSend
);
321 Code
= Provider
->ProcTable
.lpWSPSend(s
,
328 NULL
/* lpThreadId */,
331 DereferenceProviderByPointer(Provider
);
333 if (Code
== SOCKET_ERROR
)
334 WSASetLastError(Errno
);
345 WSASendDisconnect(IN SOCKET s
,
346 IN LPWSABUF lpOutboundDisconnectData
)
359 WSASendTo(IN SOCKET s
,
360 IN LPWSABUF lpBuffers
,
361 IN DWORD dwBufferCount
,
362 OUT LPDWORD lpNumberOfBytesSent
,
364 IN CONST
struct sockaddr
*lpTo
,
366 IN LPWSAOVERLAPPED lpOverlapped
,
367 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
369 PCATALOG_ENTRY Provider
;
373 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
375 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
377 WSASetLastError(WSAENOTSOCK
);
381 assert(Provider
->ProcTable
.lpWSPSendTo
);
383 #if (__W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5)
384 Code
= Provider
->ProcTable
.lpWSPSendTo(s
,
389 (CONST LPSOCKADDR
)lpTo
,
393 NULL
/* lpThreadId */,
396 Code
= Provider
->ProcTable
.lpWSPSendTo(s
,
405 NULL
/* lpThreadId */,
407 #endif /* __W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5 */
409 DereferenceProviderByPointer(Provider
);
411 if (Code
== SOCKET_ERROR
)
412 WSASetLastError(Errno
);