c语言 - 如何知道 TCP 会话结束?



大家,我想知道我的TCP连接何时完成。 我的意思是下一个:我的程序是一个客户端,它会向服务器发送任何消息,但它不知道服务器何时会关闭连接(发送 FIN 标志)。 它看起来像握手,prog 发送第一个消息,然后在同一套接字上接收并发送下一个消息,然后服务发送 FIN - 标志,这意味着 tcp 会话的结束或握手的结束。 我的目标是知道服务器何时说 FIN,im 使用流套接字。

我尝试使用来自 msdn 文档int recv(SOCKET s ... int flags);的 var 标志。但现在我认为这不是我想要的......

int partresult = recv(*my_sock, RcvBytes, Size, 0);

(我假设你指的是TCP,因为FIN仅在该上下文中使用)。

调用recv()会告诉您要查找的内容:它将返回0何时收到 FIN(即远程套接字输出已shutdown)(@RemyLebeau 已经说明,并在出现错误时返回-1)。

我用这个答案作为一个机会来警告你不要将其返回值与预期读取的字节数进行比较,因为TCP不能保证可以用一个read()读取单个send()。所以不要测试if (partresult < RcvBytes) ....

最新更新