地址系列不支持异常重现

时间:2013-10-15 07:25:30

标签: c++ linux sockets

您好我正在尝试重现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中不支持的地址族

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

如果您想知道数据是否已发送给目标收件人,请使用TCP