地址族不支持异常重现

Address family not Supported Exception Reproduce

本文关键字:异常 不支持 地址      更新时间:2023-10-16

嗨,我正在尝试重现地址家庭异常

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 不支持的地址系列

编译

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

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

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

如果您想知道数据是否已到达预期的收件人,则应使用 TCP。