WSAAccept()函数允许应用程序在接受连接请求以前得到请求者的信息,例如请求者的ID,QOS等等。这一点是通过对一个应用程序提供的条件函数的回调来实现的。如果服务提供者支持的话,在WSAConnect()函数的参数或者WSAAccept()函数的条件函数说明的用户对用户的数据可以在连接建立的时候传送到对方。
在连接拆除时,如果协议支持的话,也可以在通讯的端点间交换用户数据。需要提出拆除连接的通讯端点可以调用WSASendDisconnect()函数声明没有要传送的数据并启动连接拆除过程。对于某些协议,这一拆除过程包括了从发起拆除连接的一方发送拆除数据。在接收到远端已经启动了连接拆除过程的通知后(通常是FD_CLOSE),应用程序可以调用WSARecvDisconnect()函数接收某些拆除数据。
为了解释如何使用拆除数据,我们考虑如下的场景:在客户机/服务器模型中,通常是由客户机决定何时终止套接口的连接。在终止连接的同时,它通过拆除数据提供和服务器连接的次数。服务器也提供它和所有客户机的总的连接次数。这一过程如下所示:
客户机端 服务器端
(1) 调用WSASendDisconnect()函数
终止对话并提供总的交互次数。
(2) 得到FD_CLOSE,recv()函数
返回0,或者WSARecv()函数返回
WSAEDISCON错误表示优雅的关闭。
(3) 调用WSARecvDisconnect()
函数来得到客户机的总的交互次
数。
(4) 计算累积授权次数。
(5) 调用WSASendDisconnect()
函数来传送累积授权次数。
(6) 接收FD_CLOSE指示 (5’) 调用closesocket()函数。
(7) 调用WSARecvDisconnect()
函数来接收并存放累积授权次数。
(8) 调用closesocket()函数。
注意:步骤(5’)必须在步骤(5)之后执行,但是与步骤(6),(7)或(8)没有时间联系.