linux ipv6绑定失败,c – IPv6绑定失败

我有一个服务器实现,我需要2个独立的套接字 – 1个IPv4套接字套接字监听特定的IPv4地址和服务器端口X,以及一个IPv6套接字监听特定的IPv6地址和相同的服务器端口X.IPv4和IPv6地址打开相同的界面.

memset(&sin,sizeof(sin));

sin.sin_family = AF_INET;

sin.sin_addr.s_addr = htonl(v4addr);

sin.sin_port = htons(tcp_port);

我正在使用evconnlistener_new_bind创建ipv4套接字并绑定到它.

对于IPv6侦听器,代码如下.

memset(&sin6,sizeof(sin6));

sin6.sin6_family = AF_INET6;

memcpy(sin6.sin6_addr.s6_addr,v6addr_bytes,IPV6_ADDR_LEN);

sin6.sin6_port = htons(tcp_port);

fd = socket(AF_INET6,SOCK_STREAM,IPPROTO_TCP);

evutil_make_socket_nonblocking(fd)

setsockopt(fd,SOL_SOCKET,SO_KEEPALIVE,(void*)&on,sizeof(on))

setsockopt(fd,IPPROTO_IPV6,IPV6_V6ONLY,sizeof(on))

evutil_make_listen_socket_reuseable(fd) /* Libevent call to set SO_REUSEADDR */

evutil_make_socket_nonblocking(fd) /* Libevent call to set fd non-blocking */

bind(fd,(const struct sockaddr *)&sin6,sizeof(sin6))

当我将fd绑定到特定的ipv6地址时,我会间歇地看到绑定失败.

绑定v6失败sin6 3ffe :: a00:513 – 错误99 – 无法分配请求的地址

我尝试了gdb,但每次我gdb,绑定成功.

我不确定为什么我会看到这个问题.有人可以帮忙吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值