summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-10-13 12:50:09 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-10-13 12:50:09 +0100
commit232c9cfb7ca2827f2452d6581d154956289cd839 (patch)
treebab4c2a7a9f903b28ef181409ad3996fbc2cdafc
parent343c47663a44feaae25e3bd63e8d1f7cd3c6dc51 (diff)
parented00629a8b7ba64e96a58580ff192e87fe323f4c (diff)
downloadrabbitmq-server-bug23273.tar.gz
Merge default into bug 23273bug23273
-rw-r--r--src/rabbit_reader.erl28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index e500b111..29004bd5 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -815,17 +815,13 @@ 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;
+ socket_info(fun rabbit_net:sockname/1, fun ({A, _}) -> A end, Sock);
i(port, #v1{sock = Sock}) ->
- {ok, {_, P}} = rabbit_net:sockname(Sock),
- P;
+ socket_info(fun rabbit_net:sockname/1, fun ({_, P}) -> P end, Sock);
i(peer_address, #v1{sock = Sock}) ->
- {ok, {A, _}} = rabbit_net:peername(Sock),
- A;
+ socket_info(fun rabbit_net:peername/1, fun ({A, _}) -> A end, Sock);
i(peer_port, #v1{sock = Sock}) ->
- {ok, {_, P}} = rabbit_net:peername(Sock),
- P;
+ socket_info(fun rabbit_net:peername/1, fun ({_, P}) -> P end, Sock);
i(peer_cert_issuer, #v1{sock = Sock}) ->
cert_info(fun rabbit_ssl:peer_cert_issuer/1, Sock);
i(peer_cert_subject, #v1{sock = Sock}) ->
@@ -837,11 +833,8 @@ i(SockStat, #v1{sock = Sock}) when SockStat =:= recv_oct;
SockStat =:= send_oct;
SockStat =:= send_cnt;
SockStat =:= send_pend ->
- case rabbit_net:getstat(Sock, [SockStat]) of
- {ok, [{SockStat, StatVal}]} -> StatVal;
- {error, einval} -> undefined;
- {error, Error} -> throw({cannot_get_socket_stats, Error})
- end;
+ socket_info(fun () -> rabbit_net:getstat(Sock, [SockStat]) end,
+ fun ([{_, I}]) -> I end);
i(state, #v1{connection_state = S}) ->
S;
i(channels, #v1{}) ->
@@ -866,6 +859,15 @@ i(client_properties, #v1{connection = #connection{
i(Item, #v1{}) ->
throw({bad_argument, Item}).
+socket_info(Get, Select, Sock) ->
+ socket_info(fun() -> Get(Sock) end, Select).
+
+socket_info(Get, Select) ->
+ case Get() of
+ {ok, T} -> Select(T);
+ {error, _} -> ''
+ end.
+
cert_info(F, Sock) ->
case rabbit_net:peercert(Sock) of
nossl -> '';