From: Christopher Piro Date: Thu, 15 Nov 2007 06:26:26 +0000 (+0000) Subject: [thrift] Erlang client receive socket options X-Git-Tag: 0.2.0~1135 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=3121c8271f07b56593df3e6a10ad549590059057;p=common%2Fthrift.git [thrift] Erlang client receive socket options Summary: we want {active, false}, etc. for client sockets. make it so. Reviewed By: eletuchy Test Plan: ok Revert Plan: ok git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665337 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/erl/src/transport/tSocket.erl b/lib/erl/src/transport/tSocket.erl index c438203e..f002fd8e 100644 --- a/lib/erl/src/transport/tSocket.erl +++ b/lib/erl/src/transport/tSocket.erl @@ -1,6 +1,6 @@ %%% Copyright (c) 2007- Facebook %%% Distributed under the Thrift Software License -%%% +%%% %%% See accompanying file LICENSE or visit the Thrift site at: %%% http://developers.facebook.com/thrift/ @@ -10,7 +10,6 @@ -include("thrift.hrl"). -include("transport/tTransportException.hrl"). -% -include("transport/tTransport.hrl"). -include("transport/tSocket.hrl"). -behavior(oop). @@ -18,8 +17,8 @@ -export([attr/4, super/0, inspect/1]). -export([new/0, new/1, new/2, - effectful_setHandle/2, effectful_open/1, - isOpen/1, effectful_write/2, read/2, effectful_close/1]). + effectful_setHandle/2, effectful_open/1, + isOpen/1, effectful_write/2, read/2, effectful_close/1]). %%% %%% define attributes @@ -30,11 +29,11 @@ ?DEFINE_ATTR(host); ?DEFINE_ATTR(port); ?DEFINE_ATTR(handle). - + %%% %%% behavior callbacks %%% - + %%% super() -> SuperModule = atom() %%% | none @@ -61,7 +60,7 @@ new(Host) -> new() -> new("localhost", 9090). - + %%% %%% instance methods %%% @@ -69,19 +68,19 @@ new() -> effectful_setHandle(This, Handle) -> {ok, oop:set(This, handle, Handle)}. -effectful_open(This) -> +effectful_open(This) -> Host = oop:get(This, host), Port = oop:get(This, port), - Options = [], + Options = [binary, {packet, 0}, {active, false}], case gen_tcp:connect(Host, Port, Options) of - {error, _} -> - exit(tTransportException:new( - ?tTransportException_NOT_OPEN, - "Could not connect to " ++ Host ++ ":" ++ Port) - ); - {ok, Socket} -> - {ok, oop:set(This, handle, Socket)} + {error, _} -> + exit(tTransportException:new( + ?tTransportException_NOT_OPEN, + "Could not connect to " ++ Host ++ ":" ++ Port) + ); + {ok, Socket} -> + effectful_setHandle(This, Socket) end. isOpen(This) -> @@ -95,34 +94,34 @@ effectful_write(This, Str) -> %% error_logger:info_msg("tSocket: wrote ~p~n", [Str]), %% error_logger:info_msg("WRITE |~p| (~p)", [Str,Val]), - + case Val of - {error, _} -> - throw(tTransportException:new(?tTransportException_NOT_OPEN, "in write")); - ok -> - {ok, This} + {error, _} -> + throw(tTransportException:new(?tTransportException_NOT_OPEN, "in write")); + ok -> + {ok, This} end. read(This, Sz) -> Handle = oop:get(This, handle), case gen_tcp:recv(Handle, Sz) of - {ok, []} -> - Host = oop:get(This, host), - Port = oop:get(This, port), - throw(tTransportException:new(?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port)); - {ok, Data} -> - %% DEBUG - %% io:format("tSocket: read ~p~n", [Data]), - Data; - {error, Error} -> - exit(tTransportException:new(?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv")) - end. - + {ok, []} -> + Host = oop:get(This, host), + Port = oop:get(This, port), + throw(tTransportException:new(?tTransportException_UNKNOWN, "TSocket: Could not read " ++ Sz ++ "bytes from " ++ Host ++ ":" ++ Port)); + {ok, Data} -> + %% DEBUG + ?INFO("tSocket: read ~p", [Data]), + Data; + {error, Error} -> + exit(tTransportException:new(?tTransportException_NOT_OPEN, "in tSocket:read/2: gen_tcp:recv")) + end. + effectful_close(This) -> case oop:get(This, handle) of - nil -> - {ok, This}; - Handle -> - gen_tcp:close(Handle), - {ok, oop:set(This, handle, nil)} + nil -> + {ok, This}; + Handle -> + gen_tcp:close(Handle), + {ok, oop:set(This, handle, nil)} end.