如何在C ++中清空套接字读/写缓冲区

时间:2013-04-22 19:10:44

标签: c++ c sockets network-programming pthreads

我正在研究这个分布式计算项目,我必须模拟一些'节点'失败的时间,即他们将无法读取或写入任何传出的tcp连接。有一种方法可以做到这一点将是阅读和丢弃消息,但我在C / C ++中寻找任何内置选项,其中您可以设置套接字丢弃任何传入的消息。

2 个答案:

答案 0 :(得分:2)

只需关闭“失败”节点正在使用的所有套接字。

取决于OP节点应用程序的完成方式(在问题中未提及)。模拟故障节点的最简单方法是“终止”节点应用程序,然后将跳过所有TCP“关闭”数据包,其他节点将不知道连接关闭OR(作为第一阶段)只是手动关闭节点上的所有通信套接字。这意味着不是完全干净的实验,因为其他节点将意识到以“正确”方式关闭的连接,但足以检查系统的其余部分如何与某个节点丢失。

答案 1 :(得分:2)

如果您通过关闭套接字来模拟故障,那么很多情况下会出现问题。您,可能是,想要测试关闭和非响应端点。主机上的解决方案,如关闭套接字模拟主机错误,但网络解决方案需要在应用程序/操作系统支持解决方案之外。

封闭的插座自我清理。当您尝试访问它时,使用已关闭的套接字运行的OS会返回错误。所有这些都是你应该检查的东西。然而,真正的失败,特别是在与主机相对的网络中,只会丢弃数据包。这会让您的系统等待,可能会在tcp超时的情况下长时间等待。

模拟网络故障的最佳方法是使用防火墙规则。在防火墙处阻止连接的一端或两端,模拟网络故障。 iptables,我相信其他解决方案,允许你丢弃一些具有某些特征的数据包或数据包。