2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 DLL
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/09-2000 Created
21 getpeername(IN SOCKET s
,
23 IN OUT INT FAR
* namelen
)
27 PCATALOG_ENTRY Provider
;
31 WSASetLastError(WSANOTINITIALISED
);
35 if (!ReferenceProviderByHandle((HANDLE
)(ULONG_PTR
)(s
), &Provider
))
37 WSASetLastError(WSAENOTSOCK
);
41 Error
= Provider
->ProcTable
.lpWSPGetPeerName(s
,
46 DereferenceProviderByPointer(Provider
);
48 if (Error
== SOCKET_ERROR
)
50 WSASetLastError(Errno
);
63 getsockname(IN SOCKET s
,
65 IN OUT INT FAR
* namelen
)
69 PCATALOG_ENTRY Provider
;
73 WSASetLastError(WSANOTINITIALISED
);
77 if (!ReferenceProviderByHandle((HANDLE
)s
,
80 WSASetLastError(WSAENOTSOCK
);
84 Error
= Provider
->ProcTable
.lpWSPGetSockName(s
,
89 DereferenceProviderByPointer(Provider
);
91 if (Error
== SOCKET_ERROR
)
93 WSASetLastError(Errno
);
105 getsockopt(IN SOCKET s
,
108 OUT CHAR FAR
* optval
,
109 IN OUT INT FAR
* optlen
)
111 PCATALOG_ENTRY Provider
;
117 WSASetLastError(WSANOTINITIALISED
);
121 if (!ReferenceProviderByHandle((HANDLE
)s
,
124 WSASetLastError(WSAENOTSOCK
);
128 Error
= Provider
->ProcTable
.lpWSPGetSockOpt(s
,
135 DereferenceProviderByPointer(Provider
);
137 if (Error
== SOCKET_ERROR
)
139 WSASetLastError(Errno
);
151 setsockopt(IN SOCKET s
,
154 IN CONST CHAR FAR
* optval
,
157 PCATALOG_ENTRY Provider
;
163 WSASetLastError(WSANOTINITIALISED
);
167 if(IS_INTRESOURCE(optval
))
169 SetLastError(WSAEFAULT
);
173 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
175 WSASetLastError(WSAENOTSOCK
);
179 Error
= Provider
->ProcTable
.lpWSPSetSockOpt(s
,
186 DereferenceProviderByPointer(Provider
);
188 if (Error
== SOCKET_ERROR
)
190 WSASetLastError(Errno
);
202 shutdown(IN SOCKET s
,
205 PCATALOG_ENTRY Provider
;
211 WSASetLastError(WSANOTINITIALISED
);
215 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
217 WSASetLastError(WSAENOTSOCK
);
221 Error
= Provider
->ProcTable
.lpWSPShutdown(s
,
225 DereferenceProviderByPointer(Provider
);
227 if (Error
== SOCKET_ERROR
)
229 WSASetLastError(Errno
);
241 WSAAsyncSelect(IN SOCKET s
,
246 PCATALOG_ENTRY Provider
;
252 WSASetLastError(WSANOTINITIALISED
);
256 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
258 WSASetLastError(WSAENOTSOCK
);
262 Error
= Provider
->ProcTable
.lpWSPAsyncSelect(s
,
268 DereferenceProviderByPointer(Provider
);
270 if (Error
== SOCKET_ERROR
)
272 WSASetLastError(Errno
);
284 WSACancelBlockingCall(VOID
)
289 PCATALOG_ENTRY Provider
;
293 WSASetLastError(WSANOTINITIALISED
);
297 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
299 WSASetLastError(WSAENOTSOCK
);
303 Error
= Provider
->ProcTable
.lpWSPCancelBlockingCall(&Errno
);
305 DereferenceProviderByPointer(Provider
);
307 if (Error
== SOCKET_ERROR
)
309 WSASetLastError(Errno
);
317 WSASetLastError(WSASYSCALLFAILURE
);
327 WSADuplicateSocketA(IN SOCKET s
,
328 IN DWORD dwProcessId
,
329 OUT LPWSAPROTOCOL_INFOA lpProtocolInfo
)
332 WSAPROTOCOL_INFOA ProtocolInfoU
;
334 Error
= WSADuplicateSocketW(s
,
338 if (Error
== NO_ERROR
)
340 UnicodeToAnsi(lpProtocolInfo
,
351 WSASetLastError(WSASYSCALLFAILURE
);
362 WSADuplicateSocketW(IN SOCKET s
,
363 IN DWORD dwProcessId
,
364 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
)
368 PCATALOG_ENTRY Provider
;
372 WSASetLastError(WSANOTINITIALISED
);
376 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
378 WSASetLastError(WSAENOTSOCK
);
382 Error
= Provider
->ProcTable
.lpWSPDuplicateSocket(s
,
386 DereferenceProviderByPointer(Provider
);
388 if (Error
== SOCKET_ERROR
)
390 WSASetLastError(Errno
);
402 WSAEnumProtocolsA(IN LPINT lpiProtocols
,
403 OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer
,
404 IN OUT LPDWORD lpdwBufferLength
)
408 WSASetLastError(WSASYSCALLFAILURE
);
418 WSAEnumProtocolsW(IN LPINT lpiProtocols
,
419 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer
,
420 IN OUT LPDWORD lpdwBufferLength
)
424 WSASetLastError(WSASYSCALLFAILURE
);
434 WSAGetOverlappedResult(IN SOCKET s
,
435 IN LPWSAOVERLAPPED lpOverlapped
,
436 OUT LPDWORD lpcbTransfer
,
438 OUT LPDWORD lpdwFlags
)
442 PCATALOG_ENTRY Provider
;
446 WSASetLastError(WSANOTINITIALISED
);
450 if (!ReferenceProviderByHandle((HANDLE
)s
, &Provider
))
452 WSASetLastError(WSAENOTSOCK
);
456 Success
= Provider
->ProcTable
.lpWSPGetOverlappedResult(s
,
462 DereferenceProviderByPointer(Provider
);
464 if (Success
== FALSE
)
466 WSASetLastError(Errno
);
478 WSAGetQOSByName(IN SOCKET s
,
479 IN OUT LPWSABUF lpQOSName
,
484 WSASetLastError(WSASYSCALLFAILURE
);
494 WSAHtonl(IN SOCKET s
,
496 OUT ULONG FAR
* lpnetlong
)
500 WSASetLastError(WSASYSCALLFAILURE
);
510 WSAHtons(IN SOCKET s
,
512 OUT USHORT FAR
* lpnetshort
)
514 PCATALOG_ENTRY provider
;
517 WSASetLastError(WSANOTINITIALISED
);
521 if (!ReferenceProviderByHandle((HANDLE
)s
, &provider
))
523 WSASetLastError(WSAENOTSOCK
);
527 switch (provider
->ProtocolInfo
.iNetworkByteOrder
)
530 *lpnetshort
= htons(hostshort
);
534 *lpnetshort
= hostshort
;
536 *lpnetshort
= (((hostshort
& 0xFF00) >> 8) | ((hostshort
& 0x00FF) << 8));
562 WSAJoinLeaf(IN SOCKET s
,
563 IN CONST
struct sockaddr
*name
,
565 IN LPWSABUF lpCallerData
,
566 OUT LPWSABUF lpCalleeData
,
573 WSASetLastError(WSASYSCALLFAILURE
);
574 return INVALID_SOCKET
;
583 WSANtohl(IN SOCKET s
,
585 OUT ULONG FAR
* lphostlong
)
589 WSASetLastError(WSASYSCALLFAILURE
);
599 WSANtohs(IN SOCKET s
,
601 OUT USHORT FAR
* lphostshort
)
603 PCATALOG_ENTRY provider
;
606 WSASetLastError(WSANOTINITIALISED
);
610 if (!ReferenceProviderByHandle((HANDLE
)s
, &provider
))
612 WSASetLastError(WSAENOTSOCK
);
616 switch (provider
->ProtocolInfo
.iNetworkByteOrder
)
619 *lphostshort
= ntohs(netshort
);
623 *lphostshort
= netshort
;
625 *lphostshort
= (((netshort
& 0xFF00) >> 8) | ((netshort
& 0x00FF) << 8));
638 WSASetBlockingHook(IN FARPROC lpBlockFunc
)
651 WSAUnhookBlockingHook(VOID
)
664 WSAProviderConfigChange(IN OUT LPHANDLE lpNotificationHandle
,
665 IN LPWSAOVERLAPPED lpOverlapped
,
666 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
670 WSASetLastError(WSASYSCALLFAILURE
);
680 WSACancelAsyncRequest(IN HANDLE hAsyncTaskHandle
)
684 WSASetLastError(WSASYSCALLFAILURE
);
688 /* WinSock Service Provider support functions */
695 WPUCompleteOverlappedRequest(IN SOCKET s
,
696 IN LPWSAOVERLAPPED lpOverlapped
,
698 IN DWORD cbTransferred
,
703 WSASetLastError(WSASYSCALLFAILURE
);
713 WSCDeinstallProvider(IN LPGUID lpProviderId
,
718 WSASetLastError(WSASYSCALLFAILURE
);
728 WSCEnumProtocols(IN LPINT lpiProtocols
,
729 OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer
,
730 IN OUT LPDWORD lpdwBufferLength
,
735 WSASetLastError(WSASYSCALLFAILURE
);
745 WSCGetProviderPath(IN LPGUID lpProviderId
,
746 OUT LPWSTR lpszProviderDllPath
,
747 IN OUT LPINT lpProviderDllPathLen
,
752 WSASetLastError(WSASYSCALLFAILURE
);
762 WSCInstallProvider(IN LPGUID lpProviderId
,
763 IN CONST WCHAR
* lpszProviderDllPath
,
764 IN CONST LPWSAPROTOCOL_INFOW lpProtocolInfoList
,
765 IN DWORD dwNumberOfEntries
,
770 WSASetLastError(WSASYSCALLFAILURE
);
780 WSCEnableNSProvider(IN LPGUID lpProviderId
,
785 WSASetLastError(WSASYSCALLFAILURE
);
795 WSCInstallNameSpace(IN LPWSTR lpszIdentifier
,
796 IN LPWSTR lpszPathName
,
797 IN DWORD dwNameSpace
,
799 IN LPGUID lpProviderId
)
803 WSASetLastError(WSASYSCALLFAILURE
);
813 WSCUnInstallNameSpace(IN LPGUID lpProviderId
)
817 WSASetLastError(WSASYSCALLFAILURE
);
827 WSCWriteProviderOrder(IN LPDWORD lpwdCatalogEntryId
,
828 IN DWORD dwNumberOfEntries
)
832 return WSASYSCALLFAILURE
;
840 WSANSPIoctl(HANDLE hLookup
,
846 LPDWORD lpcbBytesReturned
,
847 LPWSACOMPLETION lpCompletion
)
851 WSASetLastError(WSASYSCALLFAILURE
);
861 WSCUpdateProvider(LPGUID lpProviderId
,
862 const WCHAR FAR
* lpszProviderDllPath
,
863 const LPWSAPROTOCOL_INFOW lpProtocolInfoList
,
864 DWORD dwNumberOfEntries
,
869 WSASetLastError(WSASYSCALLFAILURE
);
878 WSCWriteNameSpaceOrder(LPGUID lpProviderId
,
879 DWORD dwNumberOfEntries
)
883 return WSASYSCALLFAILURE
;
891 getnameinfo(const struct sockaddr FAR
* sa
,
899 if (!host
&& serv
&& flags
& NI_NUMERICSERV
)
901 const struct sockaddr_in
*sa_in
= (const struct sockaddr_in
*)sa
;
902 if (salen
>= sizeof(*sa_in
) && sa
->sa_family
== AF_INET
)
904 StringCbPrintfA(serv
, servlen
, "%u", sa_in
->sin_port
);
911 WSASetLastError(WSASYSCALLFAILURE
);
926 BOOL EXPORT
WSApSetPostRoutine(PVOID Routine
)
938 GetAddrInfoW(IN PCWSTR pszNodeName
,
939 IN PCWSTR pszServiceName
,
940 IN
const ADDRINFOW
*ptHints
,
941 OUT PADDRINFOW
*pptResult
)
945 WSASetLastError(EAI_FAIL
);