Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;TCP连接意外的write()结果 我正在研究一个C++ TCP服务器-多客户端程序。问题是,为什么即使客户端已断开连接,write()的返回值也可能大于0(在本例中,我使用localhost进行测试,然后按Ctrl+C,这样一个客户端程序将结束,但它会强制主程序关闭)_Tcp - Fatal编程技术网

C++;TCP连接意外的write()结果 我正在研究一个C++ TCP服务器-多客户端程序。问题是,为什么即使客户端已断开连接,write()的返回值也可能大于0(在本例中,我使用localhost进行测试,然后按Ctrl+C,这样一个客户端程序将结束,但它会强制主程序关闭)

C++;TCP连接意外的write()结果 我正在研究一个C++ TCP服务器-多客户端程序。问题是,为什么即使客户端已断开连接,write()的返回值也可能大于0(在本例中,我使用localhost进行测试,然后按Ctrl+C,这样一个客户端程序将结束,但它会强制主程序关闭),tcp,Tcp,有一些问题: 1.如何检测写入客户端是否失败 2.为什么write()的返回值不是这是TCP协议的固有特性。write()成功并不意味着该消息已被服务器读取(甚至到达)。不必过多地讨论TCP堆栈实现的细节,只需接受这一事实即可 如果您想确保消息已被阅读,您必须在顶部引入您自己的确认协议。不知道就意味着信息丢失了 回答有关写入闭合套接字时崩溃的问题: 应用程序终止,因为默认情况下写入关闭的套接字会导致SIGPIPE信号。有两种方法可以防止这种情况: 将SIGPIPE处理程序设置为SIG\u IG

有一些问题: 1.如何检测写入客户端是否失败
2.为什么write()的返回值不是这是TCP协议的固有特性。write()成功并不意味着该消息已被服务器读取(甚至到达)。不必过多地讨论TCP堆栈实现的细节,只需接受这一事实即可

如果您想确保消息已被阅读,您必须在顶部引入您自己的确认协议。不知道就意味着信息丢失了

回答有关写入闭合套接字时崩溃的问题:

应用程序终止,因为默认情况下写入关闭的套接字会导致SIGPIPE信号。有两种方法可以防止这种情况:

  • 将SIGPIPE处理程序设置为SIG\u IGN并处理
    write()
    错误
  • 根据您的操作系统,可以使用
    setsockopt()
    在套接字上设置SO_NOSIGPIPE,也可以使用MSG_NOSIGNAL作为
    send()
    的标志

但我的问题是服务器程序在无法从已关闭的客户端读取数据后终止。有没有办法阻止服务器程序终止?@ZZZ,在回答中回答:)