Erlang中ftp:recv_bin存在没有响应进程卡死的情况

在项目中会遇到一中情况,就是ftp:recv_bin没有返回值,进程也没有响应的情况,

解决方式就是利用gen_server:call(GenServer, Req, Timeout)的方式去加入超时来解决,超时未响应的问题。

{ok, Pid} = ftp:open(Host, [{port, Port}, {timeout, 6000},{dtimeout, 6000}]),

call(Pid, {recv_bin, RemoteFile}, bin, timer:seconds(60)),



call(GenServer, Msg, Format, Timeout) ->
Req = {self(), Msg},
case (catch gen_server:call(GenServer, Req, Timeout)) of
{ok, Bin} when is_binary(Bin) andalso (Format =:= string) ->
{ok, binary_to_list(Bin)};
{'EXIT', Re} ->
log4erl:error("*** ~p(~4.10.0w) ftp download fail !Reason = ~p", [?MODULE, ?LINE, Re]),
{error, eclosed};
Result ->
Result
end.

来解决超时的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值