SPI是Service Provider Interface,WinSock2的服务提供者接口。
WinSock2允许开发者编写自己的服务提供者接口SPI程序,自己编写的SPI程序安装到系统后,所有的WinSock请求会先发送到这个程序并由他完成网络调用。
WinSock2 SPI允许开发两类服务提供者:
1.传输服务提供者(transport service provider)
能够提供建立通信、传输数据、日常数据流控制和错误控制等功能的服务。
以DLL形式存在,对外只有一个入口函数,即WSPStartup,其中参数LPWSAPRTOCOL_INFOW结构指针决定了其类型。
2.名字空间服务提供者(name space providers)
把一个网络协议的定址属性和一个或多个用户友好名关联到一起,以便启用与协议无关的名字解析方案。
SPI提供三种协议:分层协议、基础协议、协议链
协议类型由WSAPROTOCOL_INFO结构内的WSAPROTOCOLCHAIN结构中的数据指定。
typedef struct _WSAPROTOCOL_CHAIN{ int ChainLen;//链的长度 DWORD ChainEntries[MAX_PROTOCOL_CHAIN];//协议链数组 }WSAPROTOCOLCHAIN,*LPWSAPROTOCOLCHAIN;
ChainLen取值不同意义不同:
0:分层协议
1:基础协议
>1:协议链
原文:http://www.cnblogs.com/BlogOfQili/p/7142576.html