📄 stubs.c
字号:
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS WinSock 2 DLL
* FILE: misc/stubs.c
* PURPOSE: Stubs
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/09-2000 Created
*/
#include <ws2_32.h>
#include <catalog.h>
#include <handle.h>
/*
* @implemented
*/
INT
EXPORT
getpeername(IN SOCKET s,
OUT LPSOCKADDR name,
IN OUT INT FAR* namelen)
{
int Error;
INT Errno;
PCATALOG_ENTRY Provider;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPGetPeerName(s,
name,
namelen,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @implemented
*/
INT
EXPORT
getsockname(IN SOCKET s,
OUT LPSOCKADDR name,
IN OUT INT FAR* namelen)
{
int Error;
INT Errno;
PCATALOG_ENTRY Provider;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s,
&Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPGetSockName(s,
name,
namelen,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @implemented
*/
INT
EXPORT
getsockopt(IN SOCKET s,
IN INT level,
IN INT optname,
OUT CHAR FAR* optval,
IN OUT INT FAR* optlen)
{
PCATALOG_ENTRY Provider;
INT Errno;
int Error;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s,
&Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPGetSockOpt(s,
level,
optname,
optval,
optlen,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @implemented
*/
INT
EXPORT __stdcall
setsockopt(IN SOCKET s,
IN INT level,
IN INT optname,
IN CONST CHAR FAR* optval,
IN INT optlen)
{
PCATALOG_ENTRY Provider;
INT Errno;
int Error;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPSetSockOpt(s,
level,
optname,
optval,
optlen,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @implemented
*/
INT
EXPORT
shutdown(IN SOCKET s,
IN INT how)
{
PCATALOG_ENTRY Provider;
INT Errno;
int Error;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPShutdown(s,
how,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @implemented
*/
INT
EXPORT
WSAAsyncSelect(IN SOCKET s,
IN HWND hWnd,
IN UINT wMsg,
IN LONG lEvent)
{
PCATALOG_ENTRY Provider;
INT Errno;
int Error;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPAsyncSelect(s,
hWnd,
wMsg,
lEvent,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @unimplemented
*/
INT
EXPORT
WSACancelBlockingCall(VOID)
{
#if 0
INT Errno;
int Error;
PCATALOG_ENTRY Provider;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPCancelBlockingCall(&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
#endif
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSADuplicateSocketA(IN SOCKET s,
IN DWORD dwProcessId,
OUT LPWSAPROTOCOL_INFOA lpProtocolInfo)
{
#if 0
WSAPROTOCOL_INFOA ProtocolInfoU;
Error = WSADuplicateSocketW(s,
dwProcessId,
&ProtocolInfoU);
if (Error == NO_ERROR)
{
UnicodeToAnsi(lpProtocolInfo,
ProtocolInfoU,
sizeof(
}
return Error;
#endif
UNIMPLEMENTED
return 0;
}
/*
* @implemented
*/
INT
EXPORT
WSADuplicateSocketW(IN SOCKET s,
IN DWORD dwProcessId,
OUT LPWSAPROTOCOL_INFOW lpProtocolInfo)
{
INT Errno;
int Error;
PCATALOG_ENTRY Provider;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Error = Provider->ProcTable.lpWSPDuplicateSocket(s,
dwProcessId,
lpProtocolInfo,
&Errno);
DereferenceProviderByPointer(Provider);
if (Error == SOCKET_ERROR)
{
WSASetLastError(Errno);
}
return Error;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAEnumProtocolsA(IN LPINT lpiProtocols,
OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
IN OUT LPDWORD lpdwBufferLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAEnumProtocolsW(IN LPINT lpiProtocols,
OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer,
IN OUT LPDWORD lpdwBufferLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @implemented
*/
BOOL
EXPORT
WSAGetOverlappedResult(IN SOCKET s,
IN LPWSAOVERLAPPED lpOverlapped,
OUT LPDWORD lpcbTransfer,
IN BOOL fWait,
OUT LPDWORD lpdwFlags)
{
INT Errno;
BOOL Success;
PCATALOG_ENTRY Provider;
if (!WSAINITIALIZED)
{
WSASetLastError(WSANOTINITIALISED);
return SOCKET_ERROR;
}
if (!ReferenceProviderByHandle((HANDLE)s, &Provider))
{
WSASetLastError(WSAENOTSOCK);
return SOCKET_ERROR;
}
Success = Provider->ProcTable.lpWSPGetOverlappedResult(s,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -