适用于 SAN 的 Windows Sockets SPI 扩展
本部分简要介绍了 SAN 服务提供商 DLL 必须提供的 SAN 扩展函数。 这些函数扩展 Windows 套接字 SPI,以便与 SAN 一起使用。 扩展函数在 Ws2san.h 中定义,并完整记录在 Windows 套接字直接参考 部分中。
除 WSPStartupEx 函数外,本节中列出的扩展函数由 Windows 套接字开关检索。 为了检索其中每个扩展函数的入口点,Windows 套接字交换机调用 SAN 服务提供商的 WSPIoctl 函数,并将 SIO_GET_EXTENSION_FUNCTION_POINTER 命令代码与 GUID 一起传递,该 GUID 的值标识其中一个扩展函数。
SAN 服务提供程序必须实现以下所有扩展函数, WSPRdmaRead 和 WSPMemoryRegistrationCacheCallback 函数除外。 如果 SAN 服务提供程序不支持 WSPRdmaRead 或 WSPMemoryRegistrationCacheCallback 扩展函数,则当 Windows 套接字开关请求入口点到 WSPRdmaRead 或 WSPMemoryRegistrationCacheCallback 时,其 WSPIoctl 函数必须返回错误 WSAEOPNOTSUPP。
WSPStartupEx
启动 Windows 套接字交换机对 SAN 服务提供程序的使用。
WSPRegisterMemory
注册套接字用作数据传输操作的本地源或本地目标的缓冲区数组。 此类套接字可以将此缓冲区数组用作 WSPRdmaWrite 和 WSPSend 调用中的源缓冲区,以及 WSPRdmaRead 和 WSPRecv 调用中的接收缓冲区。
WSPDeregisterMemory
释放先前调用 WSPRegisterMemory 函数注册的缓冲区数组。
WSPRegisterRdmaMemory
注册向远程对等连接公开的 RDMA 缓冲区阵列,以便向该对等连接传输数据或从该对等连接传输数据。 远程对等方中的套接字可以将此 RDMA 缓冲区数组用作 WSPRdmaWrite 调用中的目标缓冲区和 WSPRdmaRead 调用中的源缓冲区。
WSPDeregisterRdmaMemory
释放先前对 WSPRegisterRdmaMemory 函数的调用注册的缓冲区数组。
WSPMemoryRegistrationCacheCallback
释放应用程序缓冲区的所有权以及缓冲区与物理内存之间的锁,并从 SAN 服务提供商的缓存中删除缓冲区,并从 SAN NIC 中删除缓冲区注册。
WSPRdmaRead
将 RDMA 缓冲区中的数据从套接字的远程对等方可以访问的地址空间中,传输到本地套接字可以访问的地址空间中的缓冲区。
WSPRdmaWrite
从本地套接字可以访问的地址空间中的源缓冲区传输数据,该地址空间位于该套接字的远程对等方可以访问的地址空间中的目标 RDMA 缓冲区。