使用 WSARecv() 和 IOCP 时如何知道套接字何时收到 FIN 数据包?
How to know when the socket has received a FIN packet when using WSARecv() and IOCP?
当使用阻塞套接字和recv()
函数时,当套接字收到FIN数据包时,recv()
将return 0
.
但是,在使用WSARecv()
和IOCP时,如何知道套接字何时收到FIN包?我认为 lpNumberOfBytesRecvd
也会设置为 0
,但我不确定。
如果 WSARecv()
呼叫在 FIN
到达时正在进行,那么您将成功完成 lpNumberOfBytesRecvd
设置为 0。
如果 WSARecv()
调用是在 FIN
到达之后启动的,那么您可能会从 WSARecv()
调用中收到 WSAESHUTDOWN
错误。
当我得到第一个 'client close'(即零字节读取 return)时,我倾向于在套接字上发出 shutdown(s, SD_RECEIVE)
,因为这会给出上述可预测的行为并避免通过 IOCP 进行后续尝试接收...
当使用阻塞套接字和recv()
函数时,当套接字收到FIN数据包时,recv()
将return 0
.
但是,在使用WSARecv()
和IOCP时,如何知道套接字何时收到FIN包?我认为 lpNumberOfBytesRecvd
也会设置为 0
,但我不确定。
如果 WSARecv()
呼叫在 FIN
到达时正在进行,那么您将成功完成 lpNumberOfBytesRecvd
设置为 0。
如果 WSARecv()
调用是在 FIN
到达之后启动的,那么您可能会从 WSARecv()
调用中收到 WSAESHUTDOWN
错误。
当我得到第一个 'client close'(即零字节读取 return)时,我倾向于在套接字上发出 shutdown(s, SD_RECEIVE)
,因为这会给出上述可预测的行为并避免通过 IOCP 进行后续尝试接收...