【发布时间】:2019-11-07 17:30:23
【问题描述】:
大家,我想知道我的 tcp 连接何时完成。 我的意思是下一个:我的 prog 是一个客户端,它向服务器发送任何消息,但它不知道服务器何时关闭连接(发送 FIN 标志)。 它看起来像握手,prog 先发送 msg,然后在同一个套接字上接收和发送下一个 msg,然后 serv 发送 FIN - 标志,这意味着 tcp 会话结束或握手结束,如你所愿。 我的目标是知道服务器何时说 FIN,我正在使用流套接字。
我尝试使用来自 msdn doc int recv(SOCKET s ... int flags); 的 var 标志。但现在我认为这不是我要找的...
int partresult = recv(*my_sock, RcvBytes, Size, 0);
【问题讨论】:
-
recv()如果连接已被对等方正常关闭(通过发送FIN)返回 0,否则在任何错误(包括异常断开连接)时返回SOCKET_ERROR(-1) (即WSAECONNRESET、WSAECONNABORTED等)。这是documented on MSDN,请仔细阅读。 -
*mysock= 顺便说一句很可能是错的。