3

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

我这样做:

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

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

是的,我select()事先使用过,但即使对等方已关闭,它仍然返回 1。

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

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

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

4

2 回答 2

4

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

于 2012-09-06T12:02:00.573 回答
0

我想套接字之上的协议确实实现了乒乓机制是有原因的?

最好的,彼得

于 2012-09-06T12:02:33.477 回答