在使用WSARecv()和IOCP时,如何知道套接字何时收到FIN数据包?

时间:2015-03-06 12:41:46

标签: c++ sockets iocp

使用阻塞套接字和recv()函数时,当套接字收到FIN数据包时,recv()将返回0

但是,在使用WSARecv()和IOCP时,如何知道套接字何时收到FIN数据包?我认为lpNumberOfBytesRecvd也会设置为0,但我不确定。

1 个答案:

答案 0 :(得分:1)

如果在WSARecv()到达时FIN来电正在进行中,那么您将成功完成lpNumberOfBytesRecvd设为0。

如果在WSARecv()到达后启动了FIN来电,则WSAESHUTDOWN来电可能会出现WSARecv()错误。

当我得到第一个'客户端关闭'(即零字节读取返回)时,我倾向于在套接字上发出shutdown(s, SD_RECEIVE),因为这样可以提供上面的可预测行为,并避免在后续尝试中通过IOCP跳转接受......