Erlang Can';t连接到特定的网络接口

Erlang Can';t连接到特定的网络接口,erlang,inet,gen-tcp,Erlang,Inet,Gen Tcp,我已经阅读了'inet','gen_tcp'的文档,但不明白错误在哪里 连接选项() {ip,inet:socket_address()} 套接字地址()= ip_地址() ip_地址()=ip4_地址()| ip6_地址() ip6_地址()= {0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535} 所以它一定是{ip,{0..65535, 0..65535, 0..65535, 0..6

我已经阅读了'inet''gen_tcp'的文档,但不明白错误在哪里

连接选项() {ip,inet:socket_address()}

套接字地址()= ip_地址()

ip_地址()=ip4_地址()| ip6_地址()

ip6_地址()= {0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535}

所以它一定是{ip,{0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535, 0..65535}

(aaa@127.0.0.1)8> Ip = {65152,0,0,0,51840,11332,54567,49336}.
{65152,0,0,0,51840,11332,54567,49336}
(aaa@127.0.0.1)9> gen_tcp:connect({127,0,0,1}, 6653, [binary, {packet, raw}, {active, false}, {ip, Ip}]).
{error,eafnosupport}
(aaa@127.0.0.1)10> gen_tcp:connect({0,0,0,0,0,0,0,1}, 6653, [binary, {packet, raw}, {active, false}, {ip, Ip}]).
** exception exit: badarg
     in function  gen_tcp:connect/4 (gen_tcp.erl, line 148).

inet:getifaddrs().
{ok,[{"lo",
      [{flags,[up,loopback,running]},
       {hwaddr,[0,0,0,0,0,0]},
       {addr,{127,0,0,1}},
       {netmask,{255,0,0,0}},
       {addr,{0,0,0,0,0,0,0,1}},
       {netmask,{65535,65535,65535,65535,65535,65535,65535,
                 65535}}]},
     {"eth0",
      [{flags,[up,broadcast,running,multicast]},
       {hwaddr,[82,84,0,229,5,188]},
       {addr,{172,17,0,218}},
       {netmask,{255,255,255,128}},
       {broadaddr,{172,17,0,255}},
       {addr,{65152,0,0,0,20564,255,65253,1468}},
       {netmask,{65535,65535,65535,65535,0,0,0,0}}]},
     {"eth1",
      [{flags,[up,broadcast,running,multicast]},
       {hwaddr,[82,84,0,229,5,189]},
       {addr,{65152,0,0,0,51840,11332,54567,49336}},
       {netmask,{65535,65535,65535,65535,0,0,0,0}}]}]}

{error,einval}

如果再次检查文档,您将看到在使用ipv6地址时,您需要添加套接字选项inet6,您的代码中缺少该选项

请尝试此代码,它应该可以工作:

Op = [binary, {packet,line}, {active,false}, {reuseaddr,true}, inet6, {ip, {0,0,0,0,0,0,0,1}}].
gen_tcp:listen(8000, Op).

好的,但这仍然给出了一个错误Op=[binary,{packet,line},{active,false},{reuseaddr,true},inet6,{ip,{65152,0,0,05184011335456749336}]。{好的,L}=gen_tcp:听(6653,Op)。**异常错误:右侧值{error,einval}f(Op)不匹配?您试图将一个变量分配给不同的值,如:a=1。A=2。这就是获得右侧值错误的方法。
Op = [binary, {packet,line}, {active,false}, {reuseaddr,true}, inet6, {ip, {0,0,0,0,0,0,0,1}}].
gen_tcp:listen(8000, Op).