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
27 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
34 WSABuf
.buf
= (CHAR FAR
*)buf
;
61 IN OUT INT FAR
* fromlen
)
67 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
74 WSABuf
.buf
= (CHAR FAR
*)buf
;
76 Error
= WSARecvFrom(s
,
99 IN CONST CHAR FAR
* buf
,
107 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
114 WSABuf
.buf
= (CHAR FAR
*)buf
;
126 WS_DbgPrint(MAX_TRACE
,("Reporting error %d\n", Error
));
131 WS_DbgPrint(MAX_TRACE
,("Read %d bytes\n", BytesSent
));
143 IN CONST CHAR FAR
* buf
,
146 IN CONST
struct sockaddr
*to
,
153 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
160 WSABuf
.buf
= (CHAR FAR
*)buf
;
185 IN OUT LPWSABUF lpBuffers
,
186 IN DWORD dwBufferCount
,
187 OUT LPDWORD lpNumberOfBytesRecvd
,
188 IN OUT LPDWORD lpFlags
,
189 IN LPWSAOVERLAPPED lpOverlapped
,
190 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
192 PCATALOG_ENTRY Provider
;
196 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
198 if (!ReferenceProviderByHandle((HANDLE
)s
,
201 WSASetLastError(WSAENOTSOCK
);
205 assert(Provider
->ProcTable
.lpWSPRecv
);
207 Code
= Provider
->ProcTable
.lpWSPRecv(s
,
210 lpNumberOfBytesRecvd
,
214 NULL
/* lpThreadId */,
217 DereferenceProviderByPointer(Provider
);
219 if (Code
== SOCKET_ERROR
)
220 WSASetLastError(Errno
);
231 WSARecvDisconnect(IN SOCKET s
,
232 OUT LPWSABUF lpInboundDisconnectData
)
245 WSARecvFrom(IN SOCKET s
,
246 IN OUT LPWSABUF lpBuffers
,
247 IN DWORD dwBufferCount
,
248 OUT LPDWORD lpNumberOfBytesRecvd
,
249 IN OUT LPDWORD lpFlags
,
250 OUT LPSOCKADDR lpFrom
,
251 IN OUT LPINT lpFromlen
,
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
))
263 WSASetLastError(WSAENOTSOCK
);
267 assert(Provider
->ProcTable
.lpWSPRecvFrom
);
269 Code
= Provider
->ProcTable
.lpWSPRecvFrom(s
,
272 lpNumberOfBytesRecvd
,
278 NULL
/* lpThreadId */,
281 DereferenceProviderByPointer(Provider
);
283 if (Code
== SOCKET_ERROR
)
284 WSASetLastError(Errno
);
296 IN LPWSABUF lpBuffers
,
297 IN DWORD dwBufferCount
,
298 OUT LPDWORD lpNumberOfBytesSent
,
300 IN LPWSAOVERLAPPED lpOverlapped
,
301 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
303 PCATALOG_ENTRY Provider
;
307 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
309 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
311 WSASetLastError(WSAENOTSOCK
);
315 assert(Provider
->ProcTable
.lpWSPSend
);
317 Code
= Provider
->ProcTable
.lpWSPSend(s
,
324 NULL
/* lpThreadId */,
327 DereferenceProviderByPointer(Provider
);
329 if (Code
== SOCKET_ERROR
)
330 WSASetLastError(Errno
);
341 WSASendDisconnect(IN SOCKET s
,
342 IN LPWSABUF lpOutboundDisconnectData
)
355 WSASendTo(IN SOCKET s
,
356 IN LPWSABUF lpBuffers
,
357 IN DWORD dwBufferCount
,
358 OUT LPDWORD lpNumberOfBytesSent
,
360 IN CONST
struct sockaddr
*lpTo
,
362 IN LPWSAOVERLAPPED lpOverlapped
,
363 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
365 PCATALOG_ENTRY Provider
;
369 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
371 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
373 WSASetLastError(WSAENOTSOCK
);
377 assert(Provider
->ProcTable
.lpWSPSendTo
);
379 #if (__W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5)
380 Code
= Provider
->ProcTable
.lpWSPSendTo(s
,
385 (CONST LPSOCKADDR
)lpTo
,
389 NULL
/* lpThreadId */,
392 Code
= Provider
->ProcTable
.lpWSPSendTo(s
,
401 NULL
/* lpThreadId */,
403 #endif /* __W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5 */
405 DereferenceProviderByPointer(Provider
);
407 if (Code
== SOCKET_ERROR
)
408 WSASetLastError(Errno
);