C++ Boost.Asio IPv6为什么绑定错误?
我想在Linux(fedora)中使用使用boost asio的IPv6 尼克是C++ Boost.Asio IPv6为什么绑定错误?,c++,boost,boost-asio,C++,Boost,Boost Asio,我想在Linux(fedora)中使用使用boost asio的IPv6 尼克是 ifconfig -a em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.16.109 netmask 255.255.255.0 broadcast 172.16.16.255 inet6 fe80::215:17ff:fe62:d168 prefixlen 64 scop
ifconfig -a
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.16.109 netmask 255.255.255.0 broadcast 172.16.16.255
inet6 fe80::215:17ff:fe62:d168 prefixlen 64 scopeid 0x20<link>
ether 00:15:17:62:d1:68 txqueuelen 1000 (Ethernet)
RX packets 59516986 bytes 7105720351 (6.6 GiB)
RX errors 0 dropped 5015310 overruns 0 frame 0
TX packets 8680244 bytes 1666346667 (1.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 18 memory 0xb8820000-b8840000
ifconfig-a
em1:标志=4163 mtu 1500
inet 172.16.16.109网络掩码255.255.255.0广播172.16.16.255
inet6 fe80::215:17ff:fe62:d168预桥64作用域ID 0x20
以太网络00:15:17:62:d1:68 txqueuelen 1000(以太网)
接收数据包59516986字节7105720351(6.6 GiB)
接收错误0下降5015310超出0帧0
发送数据包8680244字节1666346667(1.5 GiB)
发送错误0丢弃0溢出0载波0冲突0
设备中断18存储器0xb8820000-b8840000
IPv6 udp绑定代码是
int main(int argc, char* argv[])
{
try
{
boost::asio::io_service io_service;
const char* ip_address_string = "fe80::215:17ff:fe62:d168";
// const char* ip_address_string = "::1"; // It's OK
boost::asio::ip::address my_address = boost::asio::ip::address::from_string(ip_address_string);
udp::endpoint local_endpoint(my_address, 15060);
udp my_protocol = udp::v6();
udp::socket sock(io_service);
sock.open(my_protocol);
sock.bind(local_endpoint);
std::cout << "ip:" << local_endpoint.address().to_string() << std::endl;
// -*/
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
return 0;
}
intmain(intargc,char*argv[])
{
尝试
{
boost::asio::io_服务io_服务;
const char*ip_address_string=“fe80::215:17ff:fe62:d168”;
//const char*ip_address_string=“::1”//没问题
boost::asio::ip::address my_address=boost::asio::ip::address::from_string(ip_address_string);
udp::endpoint local_endpoint(我的_地址,15060);
udp my_协议=udp::v6();
udp::套接字sock(io_服务);
sock.open(my_协议);
sock.bind(本地_端点);
std::cout看起来您可能没有访问外部网络适配器的权限
也许(部分)
- ipv6已被禁用(即使适配器显然能够并已配置)
- /proc未装入(您是否处于受限环境中,如
chroot
jail?)
- ip地址实际上是不同的-这是一个有点跛脚的一个,因为你已经检查了无数次,但我觉得我至少应该提到它
现在,请在限制较少的环境中进行尝试(例如,在虚拟化容器外部,如root…)
如果没有得到您需要的信息,请考虑使用<代码> Struts < /C> >或<代码> Lrace查看哪个SysCursCurror。
您的代码还可以,我已经在Linux和MSVC(替换我的NIC地址)上测试过了。非常感谢您的评论。我将再次检查Linux机器中的ipv6模块。