【问题标题】:How to know end of tcp session?如何知道 tcp 会话的结束?
【发布时间】: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);

【问题讨论】:

标签: c sockets tcp posix


【解决方案1】:

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

recv() 的调用将告诉您您在寻找什么:当接收到一个FIN 时它将返回0(即远程套接字输出为shutdown)(@RemyLebeau 已经说明,并且@ 987654324@ 以防出错)。

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

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 2017-01-21
    • 2010-11-05
    • 2010-11-27
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多