erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

49 linhas
1.1 KiB

-module(utSocket).
-export([
socketToIpStr/1
, socketToIpTuple/1
, socket2port/1
, str2ip/1
, ipToStr/1
]).
%% socket转IP
socketToIpStr(Socket) ->
try {ok, {TIp, _TPort}} = inet:peername(Socket), ipToStr(TIp)
catch _:_ ->
try {ok, {SIp, _SPort}} = ssl:peername(Socket), ipToStr(SIp)
catch _:_ ->
"0.0.0.0"
end
end.
ipToStr({A, B, C, D}) ->
<<_:8, IpStr>> = <<<<".", (integer_to_binary(O))/binary>> || O <- [A, B, C, D]>>,
IpStr;
ipToStr(Ip) ->
<<_:8, IpStr>> = <<<<":", (integer_to_binary(O, 16))/binary>> || O <- tuple_to_list(Ip)>>,
IpStr.
%% 获取ip
socketToIpTuple(Socket) ->
try {ok, {TIp, _TPort}} = inet:peername(Socket), TIp
catch _:_ ->
try {ok, {SIp, _SPort}} = ssl:peername(Socket), SIp
catch _:_ ->
{0, 0, 0, 0}
end
end.
socket2port(Socket) ->
case inet:peername(Socket) of
{ok, {_, Port}} -> Port;
_ -> 0
end.
str2ip(IP) when is_list(IP) ->
[A1, A2, A3, A4] = string:tokens(IP, "."),
{list_to_integer(A1), list_to_integer(A2), list_to_integer(A3), list_to_integer(A4)};
str2ip(IP) when is_tuple(IP) ->
IP.