adding explicit timeout handling and error_logging

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@666453 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
David Reiss 2008-06-11 01:02:39 +00:00
parent ddffed5ff4
commit c49dd1e9e2
3 changed files with 11 additions and 2 deletions

View File

@ -73,7 +73,7 @@ close(Transport) ->
%% Description: Reads data through from the wrapped transoprt
%%--------------------------------------------------------------------
read(Transport, Len) when is_integer(Len) ->
gen_server:call(Transport, {read, Len}).
gen_server:call(Transport, {read, Len}, _Timeout=10000).
%%====================================================================
%% gen_server callbacks

View File

@ -30,6 +30,9 @@ loop(State = #thrift_processor{in_protocol = IProto,
type = ?tMessageType_CALL} ->
ok = handle_function(State, list_to_atom(Function)),
loop(State);
{error, timeout} ->
thrift_protocol:close_transport(OProto),
ok;
{error, closed} ->
%% error_logger:info_msg("Client disconnected~n"),
thrift_protocol:close_transport(OProto),

View File

@ -29,7 +29,13 @@ write(#data{socket = Socket}, Data) ->
read(#data{socket=Socket, recv_timeout=Timeout}, Len)
when is_integer(Len), Len >= 0 ->
gen_tcp:recv(Socket, Len, Timeout).
case gen_tcp:recv(Socket, Len, Timeout) of
Err = {error, timeout} ->
error_logger:error_msg("read timeout for conn with ~p", [inet:peername(Socket)]),
gen_tcp:close(Socket),
Err;
Data -> Data
end.
%% We can't really flush - everything is flushed when we write
flush(_) ->