1

嗨,我正在尝试重现 addressFamily Exception

std::auto_ptr<UdpSocket> s_StatusSocket;
//.......
//.......
try
{
    s_StatusSocket->send(&f.addr, reqBuf, reqLen);

}
catch (const SystemException& se)
{
    string exceptionMessage=se.what();  
    if(exceptionMessage.find("ddress family"))
    {   
        //Finally THrown
    }
}

为此,我正在使用 iptables 来阻止 IP,

iptables -A INPUT -s 10.10.0.1   -j DROP
service iptables save

这样做不会在发送块上抛出异常,请告诉我如何重现 Linux 不支持的地址系列

4

2 回答 2

1

编译没有 IPv6 的内核。或者使用其他不受支持的地址系列。

您不能使用 iptables - 这与支持哪些地址系列完全无关。您需要在调用时实际传递一个不受支持的地址socket(2)。另请注意,如果您阅读手册页send(),您会发现它不会返回EAFNOSUPPORT!您误读了文档 -EAFNOSUPPORT错误由socket(2),connect(2)socketpair(2).

于 2013-10-15T09:17:44.867 回答
0

UDP协议不保证数据包的传递。没有收到预期收件人的确认。就其UdpSocket而言,它已经发送了数据包。它不知道 IPTables 正在丢弃它们。

如果您想知道数据是否已到达预期的接收者,您应该使用TCP

于 2013-10-15T07:29:12.323 回答