⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stubs.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -