diff --git a/lib/snmpkit/snmp_lib/manager.ex b/lib/snmpkit/snmp_lib/manager.ex index ac005e94..d23d0fa3 100644 --- a/lib/snmpkit/snmp_lib/manager.ex +++ b/lib/snmpkit/snmp_lib/manager.ex @@ -247,10 +247,19 @@ defmodule SnmpKit.SnmpLib.Manager do if opts[:version] == :v1 do {:error, :getbulk_requires_v2c} else - with {:ok, socket} <- create_socket(opts), - {:ok, response} <- perform_bulk_operation(socket, host, normalized_oid, opts), - :ok <- close_socket(socket) do - extract_bulk_result(response) + case create_socket(opts) do + {:ok, socket} -> + try do + case perform_bulk_operation(socket, host, normalized_oid, opts) do + {:ok, response} -> extract_bulk_result(response) + {:error, reason} -> {:error, reason} + end + after + close_socket(socket) + end + + {:error, reason} -> + {:error, reason} end end end @@ -290,11 +299,19 @@ defmodule SnmpKit.SnmpLib.Manager do opts = merge_default_opts(opts) normalized_oid = normalize_oid(oid) - with {:ok, socket} <- create_socket(opts), - {:ok, response} <- - perform_set_operation(socket, host, normalized_oid, {type, value}, opts), - :ok <- close_socket(socket) do - extract_set_result(response) + case create_socket(opts) do + {:ok, socket} -> + try do + case perform_set_operation(socket, host, normalized_oid, {type, value}, opts) do + {:ok, response} -> extract_set_result(response) + {:error, reason} -> {:error, reason} + end + after + close_socket(socket) + end + + {:error, reason} -> + {:error, reason} end end @@ -334,10 +351,17 @@ defmodule SnmpKit.SnmpLib.Manager do opts = merge_default_opts(opts) normalized_oids = Enum.map(oids, &normalize_oid/1) - with {:ok, socket} <- create_socket(opts) do - results = get_multi_with_socket(socket, host, normalized_oids, opts) - :ok = close_socket(socket) - process_multi_results(results) + case create_socket(opts) do + {:ok, socket} -> + try do + results = get_multi_with_socket(socket, host, normalized_oids, opts) + process_multi_results(results) + after + close_socket(socket) + end + + {:error, reason} -> + {:error, reason} end end end