diff options
| author | Essien Ita Essien <essiene@gmail.com> | 2008-12-20 22:41:12 +0100 |
|---|---|---|
| committer | Essien Ita Essien <essiene@gmail.com> | 2008-12-20 22:41:12 +0100 |
| commit | 9e4fdee06474001eecfd58cce1ceea7e49fde9b3 (patch) | |
| tree | 03898b98da92be0097ad1dce52785d08cb772674 /src | |
| parent | 8c86b5cacd0786f51aee34c262919318411a0593 (diff) | |
| download | rabbitmq-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.erl | 13 |
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). |
