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

📄 ws2san.h

📁 书中的主要程序文件。在打开例题的.dsw文件后,请读者在 tools菜单下的 Options 的 Directories 标签中选择 Executable files
💻 H
字号:
/*++

Copyright (c) 2000  Microsoft Corporation

Module Name:

    ws2san.h

Abstract:

    This module contains the Microsoft-specific extensions to the Windows
    Sockets SPI for WinSock Direct (SAN) support.

Revision History:

--*/

#ifndef _WS2SAN_H_
#define _WS2SAN_H_

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Option for getting maximum RDMA transfer size supported by provider
 */
#define SO_MAX_RDMA_SIZE                 0x700D

/*
 * Option for getting minimum RDMA transfer size feasible (performance-wise)
 * for the provider
 */
#define SO_RDMA_THRESHOLD_SIZE           0x700E

/*
 * The upcall table. This structure is passed by value to the service
 * provider's WSPStartup() entrypoint.
 */

typedef struct _WSPUPCALLTABLEEX {

    LPWPUCLOSEEVENT               lpWPUCloseEvent;
    LPWPUCLOSESOCKETHANDLE        lpWPUCloseSocketHandle;
    LPWPUCREATEEVENT              lpWPUCreateEvent;
    LPWPUCREATESOCKETHANDLE       lpWPUCreateSocketHandle;
    LPWPUFDISSET                  lpWPUFDIsSet;
    LPWPUGETPROVIDERPATH          lpWPUGetProviderPath;
    LPWPUMODIFYIFSHANDLE          lpWPUModifyIFSHandle;
    LPWPUPOSTMESSAGE              lpWPUPostMessage;
    LPWPUQUERYBLOCKINGCALLBACK    lpWPUQueryBlockingCallback;
    LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
    LPWPUQUEUEAPC                 lpWPUQueueApc;
    LPWPURESETEVENT               lpWPUResetEvent;
    LPWPUSETEVENT                 lpWPUSetEvent;
    LPWPUOPENCURRENTTHREAD        lpWPUOpenCurrentThread;
    LPWPUCLOSETHREAD              lpWPUCloseThread;
    LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;

} WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;

/*
 *  An extended WSABUF, that includes a registration handle
 */

typedef struct _WSABUFEX {
    u_long      len;     /* the length of the buffer */
    char FAR *  buf;     /* the pointer to the buffer */
    HANDLE  handle; /*  The handle returned by WSPRegisterMemory */
} WSABUFEX, FAR * LPWSABUFEX;



/*
 *  WinSock 2 SPI socket function prototypes
 */

int
WSPAPI
WSPStartupEx(
    IN WORD wVersionRequested,
    OUT LPWSPDATA lpWSPData,
    IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
    IN LPWSPUPCALLTABLEEX lpUpcallTable,
    OUT LPWSPPROC_TABLE lpProcTable
    );

typedef
int
(WSPAPI * LPWSPSTARTUPEX)(
    WORD wVersionRequested,
    LPWSPDATA lpWSPData,
    LPWSAPROTOCOL_INFOW lpProtocolInfo,
    LPWSPUPCALLTABLEEX lpUpcallTable,
    LPWSPPROC_TABLE lpProcTable
    );

#define WSAID_REGISTERMEMORY \
        {0xC0B422F5,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}

#define WSAID_DEREGISTERMEMORY \
        {0xC0B422F6,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}

#define WSAID_REGISTERRDMAMEMORY \
        {0xC0B422F7,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}

#define WSAID_DEREGISTERRDMAMEMORY \
        {0xC0B422F8,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}

#define WSAID_RDMAWRITE \
        {0xC0B422F9,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}

#define WSAID_RDMAREAD \
        {0xC0B422FA,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}


#define MEM_READ		1
#define MEM_WRITE		2
#define MEM_READWRITE	3


HANDLE WSPAPI
WSPRegisterMemory(
    IN SOCKET s,
    IN PVOID lpBuffer,
    IN DWORD dwBufferLength,
    IN DWORD dwFlags,
    OUT LPINT lpErrno
    );

int WSPAPI
WSPDeregisterMemory(
    IN SOCKET s,
    IN HANDLE handle,
    OUT LPINT lpErrno
    );

int WSPAPI
WSPRegisterRdmaMemory(
    IN SOCKET s,
    IN PVOID lpBuffer,
    IN DWORD dwBufferLength,
    IN DWORD dwFlags,
	OUT LPVOID lpRdmaBufferDescriptor,
    IN OUT LPDWORD lpdwDescriptorLength,
    OUT LPINT lpErrno
    );

int WSPAPI
WSPDeregisterRdmaMemory(
    IN SOCKET s,
	IN LPVOID lpRdmaBufferDescriptor,
    IN DWORD dwDescriptorLength,
    OUT LPINT lpErrno
    );

int WSPAPI
WSPRdmaWrite(
    IN SOCKET s,
    IN LPWSABUFEX lpBuffers,
    IN DWORD dwBufferCount,
    IN LPVOID lpTargetBufferDescriptor,
    IN DWORD dwTargetDescriptorLength,
	IN DWORD dwTargetBufferOffset,
    OUT LPDWORD lpdwNumberOfBytesWritten,
    IN DWORD dwFlags,
    IN LPWSAOVERLAPPED lpOverlapped,
    IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
    IN LPWSATHREADID lpThreadId,
    OUT LPINT lpErrno
    );

int WSPAPI
WSPRdmaRead(
    IN SOCKET s,
    IN LPWSABUFEX lpBuffers,
    IN DWORD dwBufferCount,
    IN LPVOID lpTargetBufferDescriptor,
    IN DWORD dwTargetDescriptorLength,
	IN DWORD dwTargetBufferOffset,
    OUT LPDWORD lpdwNumberOfBytesRead,
    IN DWORD dwFlags,
    IN LPWSAOVERLAPPED lpOverlapped,
    IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
    IN LPWSATHREADID lpThreadId,
    OUT LPINT lpErrno
    );

/*
 * "QueryInterface" versions of the above APIs.
 */

typedef
HANDLE
(WSPAPI * LPFN_WSPREGISTERMEMORY)(
    IN SOCKET s,
    IN PVOID lpBuffer,
    IN DWORD dwBufferLength,
    IN DWORD dwFlags,
    OUT LPINT lpErrno
    );

typedef
int
(WSPAPI * LPFN_WSPDEREGISTERMEMORY)(
    IN SOCKET s,
    IN HANDLE handle,
    OUT LPINT lpErrno
    );

typedef
BOOL
(WSPAPI * LPFN_WSPREGISTERRDMAMEMORY)(
    IN SOCKET s,
    IN PVOID lpBuffer,
    IN DWORD dwBufferLength,
    IN DWORD dwFlags,
	OUT LPVOID lpRdmaBufferDescriptor,
    IN OUT LPDWORD lpdwDescriptorLength,
    OUT LPINT lpErrno
    );

typedef
int
(WSPAPI * LPFN_WSPDEREGISTERRDMAMEMORY)(
    IN SOCKET s,
	IN LPVOID lpRdmaBufferDescriptor,
    IN DWORD dwDescriptorLength,
    OUT LPINT lpErrno
    );

typedef
int
(WSPAPI * LPFN_WSPRDMAWRITE)(
    IN SOCKET s,
    IN LPWSABUFEX lpBuffers,
    IN DWORD dwBufferCount,
    IN LPVOID lpTargetBufferDescriptor,
    IN DWORD dwTargetDescriptorLength,
	IN DWORD dwTargetBufferOffset,
    OUT LPDWORD lpdwNumberOfBytesWritten,
    IN DWORD dwFlags,
    IN LPWSAOVERLAPPED lpOverlapped,
    IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
    IN LPWSATHREADID lpThreadId,
    OUT LPINT lpErrno
    );

typedef
int
(WSPAPI * LPFN_WSPRDMAREAD)(
    IN SOCKET s,
    IN LPWSABUFEX lpBuffers,
    IN DWORD dwBufferCount,
    IN LPVOID lpTargetBufferDescriptor,
    IN DWORD dwTargetDescriptorLength,
	IN DWORD dwTargetBufferOffset,
    OUT LPDWORD lpdwNumberOfBytesRead,
    IN DWORD dwFlags,
    IN LPWSAOVERLAPPED lpOverlapped,
    IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
    IN LPWSATHREADID lpThreadId,
    OUT LPINT lpErrno
    );

#ifdef __cplusplus
}
#endif

#endif // _WS2SAN_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -