Erlang:{ok,{Ip,Port}} = inet:peername(Socket)检查错误?

时间:2013-03-15 20:56:28

标签: erlang switch-statement tuples inet

peername函数的erlang引用中可以看出,有两种可能的返回值。一个是ip-address和port,另一个是错误。我的问题是如何创建一个case语句,以便在出现错误时进行检查?

到目前为止,我有这个代码只有在函数实际返回一些有用的东西时才有效,但是如果有错误,元组会发生什么?

ip_address(Socket) ->   
    {ok,{Ip,Port}} = inet:peername(Socket),

1 个答案:

答案 0 :(得分:2)

像那样:

ip_address(Socket) ->
    case inet:peername(Socket) of
        {ok, {Ip, Port}} ->
            io:format("ip ~p, port ~p~n", [Ip, Port]);
        {error, Error} ->
            io:format("error ~p~n", [Error])
    end.

或者您可以使用具有两个子句的其他函数:

ip_address(Socket) ->
    ip_address_1(inet:peername(Socket)).

ip_address_1({ok, {Ip, Port}}) ->
    io:format("ip ~p, port ~p~n", [Ip, Port]);
ip_address_1({error, Error}) ->
    io:format("error ~p~n", [Error]).