TCP套接字:在发送之前检测对等体是否已关闭? (Linux)的

时间:2012-09-06 11:55:17

标签: c++ c linux sockets

是否有任何直接命令来检测对等方在发送之前是否已关闭/关闭其套接字

我这样做:

int sendResult = send( mySD, bufferPtr, numberToSend, MSG_NOSIGNAL );

send()很乐意接受该消息并且似乎发送它(正返回值),只有 next 时间我尝试发送它会返回错误。这意味着:我收到警告1消息太晚了。

是的,我之前正在使用select(),但即使对等方已关闭,它仍然会返回1。

作为一种解决方法,我可以在调用recv()之前直接使用send()执行0字节读取,这会告诉我“连接正常”(-1)或“对等关闭”(0)几乎完成了这项工作:

int readTest = recv( mySD, NULL, 0, MSG_DONTWAIT | MSG_PEEK );

但是从语义的角度来看,当我真正想要发送时,确实“感觉”错了,我真正想要的仅仅是测试。那么有一个命令,如“套接字状态”,我可以直接找出我需要的东西吗? recv()在内部使用的那种东西?

2 个答案:

答案 0 :(得分:3)

由于您的程序是基于选择的,我相信您为读取和写入fd set注册套接字。如果是,您将获得读取fd set的选择返回,并且您将'最终'recv'ing'0'并因此关闭套接字。

答案 1 :(得分:0)

我想套接字顶部的协议确实有实现乒乓机制的原因吗?

最好,彼得