Boost.Asio IPv6 为什么绑定错误
Boost.Asio IPv6 Why bind error?
我想在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 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
而 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;
}
v6 环回地址的绑定正常,但特定("fe80::215:17ff:fe62:d168")地址是绑定错误。
异常错误为"绑定:无效参数"。
为什么绑定错误?
看起来您可能没有访问外部网络适配器的权限。
也许(部分)
- IPv6 已被禁用(即使适配器显然有能力且已配置)
- /proc 未挂载(您是否处于受限环境中,例如
chroot
监狱? - IP地址实际上是不同的 - 这有点蹩脚,因为你会检查无数次,但我觉得我至少应该提到它
现在,尝试在限制较少的环境中(例如,外部虚拟化容器,作为root...
如果这不能获得所需的信息,请考虑使用strace
或ltrace
来查看哪些系统调用失败。
您的代码还可以,我已经测试了它在 Linux 和 MSVC 上运行(替换我的 NIC 地址)
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 为什么 std::绑定错误参数可以成功?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 有没有一种方法可以让OpenCLC++绑定为所有错误抛出异常
- 提升 ASIO 绑定:错误的文件描述符
- Arduino代码导致CurieBLE的c++中出现非常量绑定错误
- g std ::用共享_ptr绑定错误
- 绑定错误:地址已在使用中
- boost线程池绑定错误
- 绑定错误 98 "Address in use"应用程序终止后仍然存在
- boost::将 asio 与 accepter.async_accept 一起使用时出现绑定错误
- Boost.Asio IPv6 为什么绑定错误
- MSVC和boost::lambda::绑定错误:T0:不允许使用标准参数
- 对类型的非常量左值引用无法绑定错误
- 完成处理程序中的Boost绑定错误
- Node.js c++绑定错误:'('标记之前期望的构造函数、析构函数或类型转换