diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-09-17 12:40:26 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-09-17 12:40:26 +0100 |
| commit | d84707cc4e8a269d84dedf6afe1288b3d63152fa (patch) | |
| tree | 2947999c8a3e37dd57d5b12f0908172382282cd7 | |
| parent | 042d2778378568b4d4092d29f09fe473ae7ee18b (diff) | |
| download | rabbitmq-server-git-d84707cc4e8a269d84dedf6afe1288b3d63152fa.tar.gz | |
Ignore socket errors when not running.
| -rw-r--r-- | src/rabbit_reader.erl | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 252f81a3c9..1a77de0a82 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -808,18 +808,14 @@ infos(Items, State) -> [{Item, i(Item, State)} || Item <- Items]. i(pid, #v1{}) -> self(); -i(address, #v1{sock = Sock}) -> - {ok, {A, _}} = rabbit_net:sockname(Sock), - A; -i(port, #v1{sock = Sock}) -> - {ok, {_, P}} = rabbit_net:sockname(Sock), - P; -i(peer_address, #v1{sock = Sock}) -> - {ok, {A, _}} = rabbit_net:peername(Sock), - A; -i(peer_port, #v1{sock = Sock}) -> - {ok, {_, P}} = rabbit_net:peername(Sock), - P; +i(address, State = #v1{sock = Sock}) -> + socket_info(1, fun rabbit_net:sockname/1, State); +i(port, State = #v1{sock = Sock}) -> + socket_info(2, fun rabbit_net:sockname/1, State); +i(peer_address, State = #v1{sock = Sock}) -> + socket_info(1, fun rabbit_net:peername/1, State); +i(peer_port, State = #v1{sock = Sock}) -> + socket_info(2, fun rabbit_net:peername/1, State); i(SockStat, #v1{sock = Sock}) when SockStat =:= recv_oct; SockStat =:= recv_cnt; SockStat =:= send_oct; @@ -854,6 +850,13 @@ i(client_properties, #v1{connection = #connection{ i(Item, #v1{}) -> throw({bad_argument, Item}). +socket_info(I, Fun, State = #v1 {sock = Sock}) -> + case {Fun(Sock), ?IS_RUNNING(State)} of + {{ok, T}, _} -> element(I, T); + {{error, E}, true} -> throw({cannot_get_socket_stats, E}); + {{error, E}, false} -> E + end. + %%-------------------------------------------------------------------------- send_to_new_channel(Channel, AnalyzedFrame, State) -> |
