diff options
author | TianMaiChengGhostRidder <51288333+TianMaiChengGhostRidder@users.noreply.github.com> | 2022-08-14 21:00:59 +0800 |
---|---|---|
committer | Jens Geyer <Jens-G@users.noreply.github.com> | 2022-08-30 01:19:11 +0200 |
commit | 60fef438188958b5439c4d207f1bfa753a218938 (patch) | |
tree | e49f820dafbddb3c6d133a850e4cd2bd0a095cb7 | |
parent | 8ad8d5d7970b3ef49a71703b720e79afa776ca41 (diff) | |
download | thrift-60fef438188958b5439c4d207f1bfa753a218938.tar.gz |
Update thrift_socket_transport.erl
如果传送的数据量大的时候就会报错。
-rw-r--r-- | lib/erl/src/thrift_socket_transport.erl | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/erl/src/thrift_socket_transport.erl b/lib/erl/src/thrift_socket_transport.erl index fa10ed0c6..fe210da97 100644 --- a/lib/erl/src/thrift_socket_transport.erl +++ b/lib/erl/src/thrift_socket_transport.erl @@ -70,7 +70,24 @@ when is_integer(Len), Len >= 0 -> X when X >= Len -> {Result, Remaining} = split_binary(Binary, Len), {State#t_socket{buffer = Remaining}, {ok, Result}}; - _ -> recv(State, Len) + _ -> + %%recv(State, Len) + loop_recv(State,Len,Len) + end. + +loop_recv(State=#t_socket{buffer = Buf},ReadLen,NextReadLen) when NextReadLen =< 0-> + {Result,Remaining}=split_binary(Buf,ReadLen), + {State#t_socket{buffer = Remaining},{ok,Result}}; + +loop_recv(State=#t_socket{socket = Socket,buffer = Buf},ReadLen,NextReadLen) when NextReadLen >0 -> + case gen_tcp:recv(Socket,0,State#t_socket.recv_timeout) of + {error,Error}-> + gen_tcp:close(Socket), + {State,{error,Error}}; + {ok,Data}-> + Binary=iolist_to_binary([Buf,Data]), + Give=min(iolist_size(Binary),ReadLen), + loop_recv(State#t_socket{buffer = Binary},ReadLen,ReadLen-Give) end. recv(State = #t_socket{socket = Socket, buffer = Buf}, Len) -> |