Elixir/Erlang: :ssl.start returns {:error, :already_listening} 使用 {:reuseaddr, true} 在不同的 IP 上启动时
Elixir/Erlang: :ssl.start returns {:error, :already_listening} when starting on different IPs using {:reuseaddr, true}
我需要在主机的同一端口上的不同 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 套接字主机的相同端口?
如果是 IPV6,::1/128
是默认分配给环回接口 lo
的唯一地址。
您还需要将 ::2/128
分配给环回接口。那么第二个 :ssl:listen()
就可以了
这是一个 Erlang 错误。该问题已在 OTP 23.3 中解决。
我需要在主机的同一端口上的不同 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 套接字主机的相同端口?
如果是 IPV6,::1/128
是默认分配给环回接口 lo
的唯一地址。
您还需要将 ::2/128
分配给环回接口。那么第二个 :ssl:listen()
就可以了
这是一个 Erlang 错误。该问题已在 OTP 23.3 中解决。