Windows纯IPv6环境下运行Erlang报错的问题求助
仅IPv6环境下Erlang启动失败问题求助
问题背景
在仅支持IPv6的Windows 2019虚拟机上运行Erlang(为部署RabbitMQ做准备)时,启动erl.exe出现错误,核心问题指向Erlang内部对IPv4的硬编码依赖。
操作步骤
- 安装支持IPv4+IPv6的Windows 2019虚拟机
- 安装Erlang 27.1版本
- 执行命令移除IPv4栈:
netsh Ipv4 interface uninstall - 运行
erl.exe后触发错误
错误信息
=ERROR MSG==== 18446744072343088544 ===
Failed create 'dummy' socket:
eafnosupport (10047)
=ERROR MSG==== 18446744072343091104 ===
Failed initiating I/O backendErlang/OTP 26 [erts-14.2.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns]Eshell V14.2.3 (press Ctrl+G to abort, type help(). for help)
已尝试的解决动作
- 在
.inetrc中添加IPv6相关配置:
前两行可正常解析,但错误未消除;后两行配置解析失败。{inet6, true}. {tcp, inet6_tcp}. %% {inet_default_bind_address, {0,0,0,0,0,0,0,0}}. %% {inet_default_connect_options, [inet6]}. - 使用IPv6分布式协议启动:
erl.exe -proto_dist inet6_tcp,问题依旧存在。
源码定位
查阅Erlang源码后确认,错误来自esaio_init函数中的以下代码:
ctrl.dummy = sock_open(AF_INET, SOCK_STREAM, IPPROTO_TCP);
该行硬编码使用AF_INET(IPv4地址族)创建dummy socket,在无IPv4栈的环境下直接触发eafnosupport(地址族不支持)错误。
请求解决建议
需要找到绕过或修复该IPv4依赖的方法,确保Erlang能在纯IPv6环境下正常启动,从而继续部署RabbitMQ。
内容的提问来源于stack exchange,提问作者tamir
相关产品推荐
相关产品推荐

