From: eletuchy Date: Tue, 26 Feb 2008 11:44:00 +0000 (+0000) Subject: [thrift] better error handling and timeouts in tSocket code X-Git-Tag: 0.2.0~968 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=698713cf644661faa935f0b5cdee2b8e4a99f1a2;p=common%2Fthrift.git [thrift] better error handling and timeouts in tSocket code Summary: default socket send timeout to 5seconds, not infinity. close the socket in case of an error. Reviewed By: cpiro Test Plan: ran a client for slow services and sanity checked other client code to make sure Revert Plan: sure git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665504 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/erl/src/transport/tSocket.erl b/lib/erl/src/transport/tSocket.erl index 3af77c22..96b7aa9c 100644 --- a/lib/erl/src/transport/tSocket.erl +++ b/lib/erl/src/transport/tSocket.erl @@ -71,9 +71,15 @@ effectful_setHandle(This, Handle) -> effectful_open(This) -> Host = oop:get(This, host), Port = oop:get(This, port), - Options = [binary, {packet, 0}, {active, false}, {reuseaddr, true}, - {nodelay, true}], - + Options = [binary, {packet, 0}, + {active, false}, + {reuseaddr, true}, + {nodelay, true}, + {send_timeout, case application:get_env(thrift, socket_send_timeout) of + Millis when is_integer(Millis), Millis > 0 -> Millis; + _Else -> 5000 + end} + ], case gen_tcp:connect(Host, Port, Options) of {error, _} -> tException:throw(tTransportException, @@ -90,7 +96,11 @@ effectful_write(This, Data) -> Handle = oop:get(This, handle), case gen_tcp:send(Handle, Data) of + {error,timeout} -> + effectful_close(This), + tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in write"]); {error, _} -> + effectful_close(This), tException:throw(tTransportException, [?tTransportException_NOT_OPEN, "in write"]); ok -> {ok, This}