2013-10-15 106 views
1

嗨,我試圖重現addressFamily異常不支持地址族異常重現

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

回答

1

編譯沒有IPv6的內核。或者使用其他不受支持的地址系列。

你不能使用iptables - 這與支持哪些地址系列完全無關。當您撥打socket(2)時,您需要實際傳入一個不受支持的地址。還要注意,如果你閱讀send()的手冊頁,你會發現它不會返回EAFNOSUPPORT!您誤解了文檔 - EAFNOSUPPORT錯誤由socket(2)connect(2)socketpair(2)返回。

0

UDP協議不提供關於數據包傳送的保證。目標收件人沒有收到確認。就UdpSocket而言,它已經發送了數據包。它不知道IPTables正在拋棄它們。

如果您想知道數據是否已將它傳送給預期收件人,您應該使用TCP

+0

所以沒有辦法重現它 – anish

相關問題