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;
}
原文地址:https://www.cnblogs.com/tanghuimin0713/p/4000307.html