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



我在这个分布式计算项目上工作,我必须模拟一些"节点"失败的时间,I。他们将不能读写任何传出的TCP连接。一种方法是读取和丢弃消息,但我在C/c++中寻找任何内置选项,其中您可以设置套接字来丢弃任何传入消息。

如果您通过关闭套接字来模拟失败,那么您将错过许多发生问题的情况。你,可能,想要测试关闭和非响应端点。主机上的解决方案,如关闭套接字模拟主机错误,但网络问题需要应用程序/操作系统支持的解决方案。

关闭的套接字自行清理。使用关闭的套接字运行的操作系统在您尝试访问它时返回错误。所有这些都是你应该检查的。然而,真正的故障,特别是在网络中而不是在主机中,只会丢弃数据包。当tcp超时时,这可能会使系统等待很长时间。

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

关闭所有"失败"节点正在使用的套接字。

取决于OP节点应用程序是如何完成的(这在问题中没有提到)..模拟故障节点的最简单方法是要么"杀死"节点应用程序,然后所有TCP"关闭"数据包将被跳过,其他节点将不知道连接关闭,或者(作为第一阶段)手动关闭节点上的所有通信套接字。这意味着不是完全干净的实验,因为其他节点将以"适当"的方式意识到连接关闭,但足以检查系统的其余部分在某些节点丢失时的行为。

最新更新