File 1029-Fix-dtls-listen-on-ipv6-with-default-ip.patch of Package erlang
From 8025f891bc3940dea2420c49861d323b0d765d5d Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Wed, 20 Mar 2024 10:47:26 +0100
Subject: [PATCH 1/3] Fix dtls listen on ipv6 with default ip
IP adress always defaulted to {0,0,0,0} even for ipv6 connections,
which caused a single entry if you where listening on both stacks.
Fixes #7955
---
lib/ssl/src/dtls_socket.erl | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/lib/ssl/src/dtls_socket.erl b/lib/ssl/src/dtls_socket.erl
index 7122aa0252..fbb72f59ef 100644
--- a/lib/ssl/src/dtls_socket.erl
+++ b/lib/ssl/src/dtls_socket.erl
@@ -50,7 +50,7 @@ listen(Port, #config{inet_ssl = SockOpts,
ssl = SslOpts,
emulated = EmOpts,
inet_user = Options} = Config) ->
- IP = proplists:get_value(ip, SockOpts, {0,0,0,0}),
+ IP = proplists:get_value(ip, SockOpts, default_ip(SockOpts)),
case dtls_listener_sup:lookup_listener(IP, Port) of
undefined ->
start_new_listener(IP, Port, Config);
@@ -95,13 +95,17 @@ connect(Address, Port, #config{transport_info = {Transport, _, _, _, _} = CbInfo
close(#sslsocket{pid = {dtls, #config{dtls_handler = {Pid, Port0},
inet_ssl = SockOpts}}}) ->
- IP = proplists:get_value(ip, SockOpts, {0,0,0,0}),
+ IP = proplists:get_value(ip, SockOpts, default_ip(SockOpts)),
Port = get_real_port(Pid, Port0),
dtls_listener_sup:register_listener({undefined, Pid}, IP, Port),
- dtls_packet_demux:close(Pid).
+ dtls_packet_demux:close(Pid).
+
+default_ip(SockOpts) ->
+ case proplists:get_value(inet6, SockOpts, false) of
+ false -> {0,0,0,0};
+ true -> {0,0,0,0, 0,0,0,0}
+ end.
-close(_, dtls) ->
- ok;
close(gen_udp, {_Client, _Socket}) ->
ok;
close(Transport, {_Client, Socket}) ->
--
2.35.3