I’m trying to get parts of webrtc stack to work with elixir, but right now I’m stuck with this DTLS error.
[error] Acceptor process (pid #PID<0.257.0>) unexpectedly crashed:
** (stop) {:key_exists, {{192, 168, 1, 48}, 53780}}
(stdlib) gb_trees.erl:319: :gb_trees.insert_1/4
(stdlib) gb_trees.erl:278: :gb_trees.insert/3
(ssl) dtls_udp_listener.erl:238: :dtls_udp_listener.setup_new_connection/5
(ssl) dtls_udp_listener.erl:138: :dtls_udp_listener.handle_info/2
(stdlib) gen_server.erl:616: :gen_server.try_dispatch/4
(stdlib) gen_server.erl:686: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Why does it try to setup a connection multiple times? I’ve found this thread on erlang mailing list, maybe the bug hasn’t been fixed yet? Is there an easy way to find that out?
The way I accept connections:
def accept(listen_socket, server, timeout) do
case :ssl.transport_accept(listen_socket, timeout) do
{:ok, accept_socket} ->
GenServer.cast(server, :accepted)
case :ssl.ssl_accept(accept_socket, timeout) do
:ok -> {:ok, accept_socket}
{:error, :closed} -> {:error, :econnaborted}
{:error, reason} -> {:error, reason}
end
{:error, reason} ->
{:error, reason}
end
end
I’ve noticed I’m getting {:error, {:tls_alert, 'record overflow'}}
in :ssl.ssl_accept(accept_socket, timeout)
above. Maybe there is a problem with the keys I’m using …