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
33 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
37 WSABuf
.buf
= (CHAR FAR
*)buf
;
39 Error
= WSARecv(s
, &WSABuf
, 1, &BytesReceived
, (LPDWORD
)&flags
, NULL
, NULL
);
41 if( Error
) return -1; else return BytesReceived
;
56 IN OUT INT FAR
* fromlen
)
62 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
66 WSABuf
.buf
= (CHAR FAR
*)buf
;
68 Error
= WSARecvFrom(s
, &WSABuf
, 1, &BytesReceived
, (LPDWORD
)&flags
, from
, fromlen
, NULL
, NULL
);
70 if( Error
) return -1; else return BytesReceived
;
81 IN CONST CHAR FAR
* buf
,
89 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
93 WSABuf
.buf
= (CHAR FAR
*)buf
;
95 Error
= WSASend(s
, &WSABuf
, 1, &BytesSent
, flags
, NULL
, NULL
);
98 WS_DbgPrint(MAX_TRACE
,("Reporting error %d\n", Error
));
101 WS_DbgPrint(MAX_TRACE
,("Read %d bytes\n", BytesSent
));
114 IN CONST CHAR FAR
* buf
,
117 IN CONST
struct sockaddr
*to
,
124 WS_DbgPrint(MAX_TRACE
, ("s (0x%X) buf (0x%X) len (0x%X) flags (0x%X).\n",
125 s
, buf
, len
, flags
));
128 WSABuf
.buf
= (CHAR FAR
*)buf
;
130 Error
= WSASendTo(s
, &WSABuf
, 1, &BytesSent
, flags
, to
, tolen
, NULL
, NULL
);
132 if( Error
) return -1; else return BytesSent
;
143 IN OUT LPWSABUF lpBuffers
,
144 IN DWORD dwBufferCount
,
145 OUT LPDWORD lpNumberOfBytesRecvd
,
146 IN OUT LPDWORD lpFlags
,
147 IN LPWSAOVERLAPPED lpOverlapped
,
148 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
150 PCATALOG_ENTRY Provider
;
154 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
156 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
157 WSASetLastError(WSAENOTSOCK
);
161 assert(Provider
->ProcTable
.lpWSPRecv
);
163 Code
= Provider
->ProcTable
.lpWSPRecv(s
, lpBuffers
, dwBufferCount
,
164 lpNumberOfBytesRecvd
, lpFlags
, lpOverlapped
,
165 lpCompletionRoutine
, NULL
/* lpThreadId */, &Errno
);
167 DereferenceProviderByPointer(Provider
);
169 if (Code
== SOCKET_ERROR
)
170 WSASetLastError(Errno
);
183 OUT LPWSABUF lpInboundDisconnectData
)
198 IN OUT LPWSABUF lpBuffers
,
199 IN DWORD dwBufferCount
,
200 OUT LPDWORD lpNumberOfBytesRecvd
,
201 IN OUT LPDWORD lpFlags
,
202 OUT LPSOCKADDR lpFrom
,
203 IN OUT LPINT lpFromlen
,
204 IN LPWSAOVERLAPPED lpOverlapped
,
205 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
207 PCATALOG_ENTRY Provider
;
211 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
213 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
214 WSASetLastError(WSAENOTSOCK
);
218 assert(Provider
->ProcTable
.lpWSPRecvFrom
);
220 Code
= Provider
->ProcTable
.lpWSPRecvFrom(s
, lpBuffers
, dwBufferCount
,
221 lpNumberOfBytesRecvd
, lpFlags
, lpFrom
, lpFromlen
, lpOverlapped
,
222 lpCompletionRoutine
, NULL
/* lpThreadId */, &Errno
);
224 DereferenceProviderByPointer(Provider
);
226 if (Code
== SOCKET_ERROR
)
227 WSASetLastError(Errno
);
240 IN LPWSABUF lpBuffers
,
241 IN DWORD dwBufferCount
,
242 OUT LPDWORD lpNumberOfBytesSent
,
244 IN LPWSAOVERLAPPED lpOverlapped
,
245 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
247 PCATALOG_ENTRY Provider
;
251 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
253 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
254 WSASetLastError(WSAENOTSOCK
);
258 assert(Provider
->ProcTable
.lpWSPSend
);
260 Code
= Provider
->ProcTable
.lpWSPSend(s
, lpBuffers
, dwBufferCount
,
261 lpNumberOfBytesSent
, dwFlags
, lpOverlapped
,
262 lpCompletionRoutine
, NULL
/* lpThreadId */, &Errno
);
264 DereferenceProviderByPointer(Provider
);
266 if (Code
== SOCKET_ERROR
)
267 WSASetLastError(Errno
);
280 IN LPWSABUF lpOutboundDisconnectData
)
295 IN LPWSABUF lpBuffers
,
296 IN DWORD dwBufferCount
,
297 OUT LPDWORD lpNumberOfBytesSent
,
299 IN CONST
struct sockaddr
*lpTo
,
301 IN LPWSAOVERLAPPED lpOverlapped
,
302 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
304 PCATALOG_ENTRY Provider
;
308 WS_DbgPrint(MAX_TRACE
, ("Called.\n"));
310 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
)) {
311 WSASetLastError(WSAENOTSOCK
);
315 assert(Provider
->ProcTable
.lpWSPSendTo
);
317 #if (__W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5)
318 Code
= Provider
->ProcTable
.lpWSPSendTo(s
, lpBuffers
, dwBufferCount
,
319 lpNumberOfBytesSent
, dwFlags
, (CONST LPSOCKADDR
) lpTo
, iToLen
, lpOverlapped
,
320 lpCompletionRoutine
, NULL
/* lpThreadId */, &Errno
);
322 Code
= Provider
->ProcTable
.lpWSPSendTo(s
, lpBuffers
, dwBufferCount
,
323 lpNumberOfBytesSent
, dwFlags
, lpTo
, iToLen
, lpOverlapped
,
324 lpCompletionRoutine
, NULL
/* lpThreadId */, &Errno
);
325 #endif /* __W32API_MAJOR_VERSION < 2 || __W32API_MINOR_VERSION < 5 */
327 DereferenceProviderByPointer(Provider
);
329 if (Code
== SOCKET_ERROR
)
330 WSASetLastError(Errno
);