ipv4、ipv6的socket同時監聽“bind: Address already in use”的解決方法


創建ipv4和ipv6的socket,同時監聽某個端口的ipv4和ipv6報文,運行時bind函數執行失敗,提示“bind: Address already in use”。
原因:ipv6的socket默認情況下也會接收ipv4地址的報文,不同的socket不能監聽同樣的ip同樣的端口。
方法:設置ipv6的socket只接收ipv6地址的報文

int on = 1;
if (setsockopt(fd_v6, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) < 0)
{
    perror("setsockopt");
    return -1;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM