连接设置和拆解
WSAAccept 函数允许应用程序在决定是否接受传入连接请求之前获取调用方标识符和服务质量等调用方信息。 这是通过回调应用程序提供的条件函数完成的。
在建立连接期间,WSAConnect 函数中的参数指定的用户到用户数据以及 WSAAccept 的条件函数可以传输到对等方,前提是服务提供商支持此功能。
还可以(对于支持此协议的协议)在连接拆解时间在终结点之间交换用户数据。 启动拆解的末尾可以调用 WSASendDisconnect 函数,以指示不再发送任何数据并启动连接拆解序列。 对于某些协议,拆解的一部分是断开数据与拆解发起程序的连接。 收到通知后,远程端已启动拆解(通常由FD_CLOSE指示),可以调用 WSARecvDisconnect 函数来接收断开连接的数据(如果有)。
若要说明如何使用断开连接数据,请考虑以下方案。 客户端/服务器应用程序的客户端一半负责终止套接字连接。 与终止巧合时,它提供(使用断开连接数据)它与服务器处理的事务总数。 服务器又使用已处理的所有客户端的事务总数进行响应。 调用和指示的顺序可能如下所示:
客户端 | 服务器端 |
---|---|
(1) 调用 WSASendDisconnect 以结束会话并提供事务总数。 | |
(2) 获取FD_CLOSE、具有零返回值的 recv,或者 从 WSARecv 指示正常关闭的 WSAEDISCON 错误返回。 | |
(3) 调用 WSARecvDisconnect 以获取客户端的事务总数。 | |
(4) 计算所有事务的累计总计。 | |
(5) 调用 WSASendDisconnect 以传输总计。 | |
(6) 接收FD_CLOSE指示。 | (5a) 调用 closesocket。 |
(7) 调用 WSARecvDisconnect 来接收和存储累计总计的事务。 | |
(8) 调用 closesocket |
请注意,步骤(5a)必须遵循步骤(5),但与步骤(6)、(7)或(8)没有计时关系。