Packages

The Phi Programming Language

Current section

Files

Jump to
phi stdlib Network Inet.erl
Raw

stdlib/Network/Inet.erl

%%---------------------------------------------------------------------------
%% |
%% Module : Inet
%% Copyright : (c) 2020-2021 EMQ Technologies Co., Ltd.
%% License : BSD-style (see the LICENSE file)
%%
%% Maintainer : Feng Lee, feng@emqx.io
%% Yang M, yangm@emqx.io
%% Stability : experimental
%% Portability : portable
%%
%% The Inet FFI module.
%%
%%---------------------------------------------------------------------------
-module('Network.Inet.FFI').
-include("../Foreign.hrl").
-export([ hostname/0
, getStat/1
, getStatWith/2
, peername/1
, sockname/1
]).
hostname() ->
?IO(return(inet:gethostname())).
getStat(Socket) ->
?IO(transStat(return(inet:getstat(Socket)))).
getStatWith(Socket, Options) ->
?IO(transStat(return(inet:getstat(Socket, Options)))).
peername(Socket) ->
?IO(transAddr(return(inet:peername(Socket)))).
sockname(Socket) ->
?IO(transAddr(return(inet:sockname(Socket)))).
transStat(Stats) when is_list(Stats) ->
[{transStat(K), V} || {K, V} <- Stats];
transStat(recv_cnt) -> {'RecvCnt'};
transStat(recv_max) -> {'RecvMax'};
transStat(recv_avg) -> {'RecvAvg'};
transStat(recv_oct) -> {'RecvOct'};
transStat(recv_dvi) -> {'RecvDvi'};
transStat(send_cnt) -> {'SendCnt'};
transStat(send_max) -> {'SendMax'};
transStat(send_avg) -> {'SendAvg'};
transStat(send_oct) -> {'SendOct'};
transStat(send_pend) -> {'SendPend'}.
transAddr({Addr, PortNumber}) ->
{transAddr(Addr), PortNumber};
transAddr(Addr) when size(Addr) == 4 ->
{'Ip4Address', Addr};
transAddr(Addr) when size(Addr) == 8 ->
{'Ip6Address', Addr}.
return({ok, Result}) -> Result;
return({error, Reason}) -> error(Reason).