erlang - Elixir/Erlang: :ssl.start 在使用 {:reuseaddr, true} 在不同的 IP 上启动时返回 {:error, :already_listening}
问题描述
我需要在主机的同一端口上的不同 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_listen} 不匹配
如何使用:ssl.listen和:reuseaddr选项在主机的同一端口上的不同 IP 地址上启动两个 DTLS 套接字?
解决方案
这是一个 Erlang Bug。该问题在 OTP 23.3 中得到解决。
推荐阅读
- oop - 是否使用结构对单个属性进行分组?
- r - 重命名一系列列名中的变量
- python - 嵌套列表与python中的格式字符串比较
- .net-core - 如何为现有 AzureCosmosDB 生成模型类?
- asp.net-core - System.NotSupportedException:不明确的 HTTP 操作方法
- c++ - 找不到 C++ DLL
- angular - 如何使用 ngFor 通过 http 服务接收数据?
- java - 使用 Espresso、Mockito、Koin 和 Kotlin 进行 Android UI 测试会出现模拟问题
- azure - 管道 Powershell 任务 - 跨多个任务的一个会话
- javascript - 从页面加载列表中选择随机颜色托盘