summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEssien Ita Essien <essiene@gmail.com>2008-12-20 22:41:12 +0100
committerEssien Ita Essien <essiene@gmail.com>2008-12-20 22:41:12 +0100
commit9e4fdee06474001eecfd58cce1ceea7e49fde9b3 (patch)
tree03898b98da92be0097ad1dce52785d08cb772674 /src
parent8c86b5cacd0786f51aee34c262919318411a0593 (diff)
downloadrabbitmq-server-git-9e4fdee06474001eecfd58cce1ceea7e49fde9b3.tar.gz
Improve compatibility in the rabbit_net abstraction layer
- async_recv on rabbit_ssl_socket now sees a timeout of -1 as infinity in the underlying ssl recv calls. - port_command on rabbit_ssl_socket now properly returns the atom 'true' on success to maintain compatibility with erlang:port_command. It throws an exception on an error - Make close on rabbit_ssl_socket to close both the ssl and tcp sockets.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_net.erl13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl
index 7d39fc255d..cd52ded803 100644
--- a/src/rabbit_net.erl
+++ b/src/rabbit_net.erl
@@ -43,11 +43,14 @@
-include("rabbit.hrl").
+async_recv(Sock, Length, -1) when is_record(Sock, rabbit_ssl_socket) ->
+ async_recv(Sock, Length, infinity);
async_recv(Sock, Length, Timeout) when is_record(Sock, rabbit_ssl_socket) ->
Pid = self(),
Ref = make_ref(),
+
Fun = fun() ->
case ssl:recv(Sock#rabbit_ssl_socket.ssl, Length, Timeout) of
{ok, Data} ->
@@ -64,7 +67,8 @@ async_recv(Sock, Length, Timeout) when is_port(Sock) ->
prim_inet:async_recv(Sock, Length, Timeout).
close(Sock) when is_record(Sock, rabbit_ssl_socket) ->
- ssl:close(Sock#rabbit_ssl_socket.ssl);
+ ssl:close(Sock#rabbit_ssl_socket.ssl),
+ gen_tcp:close(Sock#rabbit_ssl_socket.tcp);
close(Sock) when is_port(Sock) ->
gen_tcp:close(Sock).
@@ -92,7 +96,12 @@ peername(Sock) when is_port(Sock) ->
port_command(Sock, Data) when is_record(Sock, rabbit_ssl_socket) ->
- ssl:send(Sock#rabbit_ssl_socket.ssl, Data);
+ case ssl:send(Sock#rabbit_ssl_socket.ssl, Data) of
+ ok ->
+ true;
+ {error, Reason} ->
+ throw(Reason)
+ end;
port_command(Sock, Data) when is_port(Sock) ->
erlang:port_command(Sock, Data).