如何知道TCP会话结束?

时间:2019-06-25 20:19:21

标签: c sockets tcp posix

每个人,我想知道我的tcp连接何时完成。 我的意思是下一个:我的编是一个客户端,它将任何消息发送到服务器,但是它不知道服务器何时关闭连接(发送FIN标志)。 它看起来像握手,程序先发送msg,然后在同一套接字上接收并发送下一个msg,然后服务发送FIN-标志,即您希望tcp会话结束或握手结束。 我的目标是知道服务器何时使用流套接字说FIN。

我尝试使用msdn doc int recv(SOCKET s ... int flags);中的var标志。但是现在我认为我不是在寻找...

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

1 个答案:

答案 0 :(得分:1)

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

recv()的调用将告诉您您要寻找的内容:当收到FIN(即远程套接字输出为0)时,它将返回shutdown(已声明) @RemyLebeau,如果发生错误,请-1)。

我将这个答案用作警告您有关 not 的机会,因为TCP无法保证单个send()可以用一个read()读取。因此,测试if (partresult < RcvBytes) ...