File 3512-snmp-manager-Handle-the-udp-error-message.patch of Package erlang

From 1a076f7298f1aae3e96544ffd759588139aa563e Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Mon, 30 Nov 2020 17:26:38 +0100
Subject: [PATCH 2/2] [snmp|manager] Handle the udp-error message

We explicitly handle udp_error message. The action is
just a error message, but its better then ignoring it.

OTP-17033
---
 lib/snmp/src/manager/snmpm_net_if.erl | 48 +++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/lib/snmp/src/manager/snmpm_net_if.erl b/lib/snmp/src/manager/snmpm_net_if.erl
index 5c18058a7a..1eb5ae216a 100644
--- a/lib/snmp/src/manager/snmpm_net_if.erl
+++ b/lib/snmp/src/manager/snmpm_net_if.erl
@@ -607,6 +607,19 @@ handle_info(
 	    {noreply, State}
     end;
 
+handle_info(
+  {udp_error, Socket, Error},
+  #state{transports = Transports} = State) ->
+    ?vinfo("got udp-error on ~p: ~w", [Socket, Error]),
+    case lists:keyfind(Socket, #transport.socket, Transports) of
+	#transport{socket = Socket} = Transport ->
+	    handle_udp_error(Transport, Error),
+	    {noreply, State};
+	false ->
+            handle_udp_error_unknown(Socket, Error),
+	    {noreply, State}
+    end;
+
 handle_info(inform_response_gc, State) ->
     ?vlog("received inform_response_gc message", []),
     State2 = handle_inform_response_gc(State),
@@ -639,6 +652,41 @@ handle_info(Info, State) ->
     handle_info_unknown(Info, State).
 
 
+handle_udp_error(#transport{socket = Socket}, Error) ->
+    try inet:sockname(Socket) of
+        {ok, {IP, Port}} ->
+            error_msg("UDP Error for transport: "
+                      "~n      Socket: ~p (~p, ~p)"
+                      "~n      Error:  ~p", [Socket, IP, Port, Error]);
+        {error, _} ->
+            error_msg("UDP Error for transport: "
+                      "~n      Socket: ~p"
+                      "~n      Error:  ~p", [Socket, Error])
+    catch
+        _:_:_ ->
+            error_msg("UDP Error for transport: "
+                      "~n      Socket: ~p"
+                      "~n      Error:  ~p", [Socket, Error])
+    end.
+
+handle_udp_error_unknown(Socket, Error) ->
+    try inet:sockname(Socket) of
+        {ok, {IP, Port}} ->
+            warning_msg("UDP Error for unknown transport: "
+                        "~n      Socket: ~p (~p, ~p)"
+                        "~n      Error:  ~p", [Socket, IP, Port, Error]);
+        {error, _} ->
+            warning_msg("UDP Error for unknown transport: "
+                        "~n      Socket: ~p"
+                        "~n      Error:  ~p", [Socket, Error])
+    catch
+        _:_:_ ->
+            warning_msg("UDP Error for transport: "
+                        "~n      Socket: ~p"
+                        "~n      Error:  ~p", [Socket, Error])
+    end.
+
+
 handle_info_unknown(Info, State) ->
     warning_msg("received unknown info: ~n~p", [Info]),
     {noreply, State}.
-- 
2.26.2

openSUSE Build Service is sponsored by