是否有任何直接命令来检测对等方在发送之前是否已关闭/关闭其套接字?
我这样做:
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()
在内部使用的那种东西?
答案 0 :(得分:3)
由于您的程序是基于选择的,我相信您为读取和写入fd set注册套接字。如果是,您将获得读取fd set的选择返回,并且您将'最终'recv'ing'0'并因此关闭套接字。
答案 1 :(得分:0)
我想套接字顶部的协议确实有实现乒乓机制的原因吗?
最好,彼得