酏剂/Erlang:使用{:reuseaddr,true}在不同的IP上启动时,:ssl.start返回{:error,:already_listening}

z3yyvxxp  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(94)

我需要在主机的同一端口上打开两个不同IP上的DTLS套接字。将**:gen_udp{:reuseaddr,true}一起使用可以正常工作。但与:ssl.listen**一起使用则不行
您可以使用以下命令重新生成它:

sudo ip addr add ::2 dev lo

然后在iex中

:ssl.start

{:ok, socket} = :ssl.listen(20_100, [
  :binary,
  :inet6,
  {:active, true},
  {:reuseaddr, true},
  {:protocol, :dtls},
  {:ip, {0, 0, 0, 0, 0, 0, 0, 1}}
])

{:ok, socket2} = :ssl.listen(20_100, [
  :binary,
  :inet6,
  {:active, true},
  {:reuseaddr, true},
  {:protocol, :dtls},
  {:ip, {0, 0, 0, 0, 0, 0, 0, 2}}
])

最后一个:ssl.listen将与{:error,:already_listening}不匹配
如何使用**:ssl.listen:reuseaddr**选项在主机的同一端口上启动不同IP地址上的两个DTLS套接字?

wko9yo5t

wko9yo5t1#

这是一个Erlang错误。该问题已在OTP 23.3中解决。
https://github.com/erlang/otp/issues/4375

7nbnzgx9

7nbnzgx92#

对于IPV6,::1/128是默认情况下分配给环回接口lo的唯一地址。
您还需要将::2/128分配给环回接口。

相关问题