erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

48 wiersze
1.1 KiB

4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
  1. -module(utSocket).
  2. -export([
  3. socketToIpStr/1
  4. , socketToIpTuple/1
  5. , socket2port/1
  6. , str2ip/1
  7. , ipToStr/1
  8. ]).
  9. %% socket转IP
  10. socketToIpStr(Socket) ->
  11. try {ok, {TIp, _TPort}} = inet:peername(Socket), ipToStr(TIp)
  12. catch _:_ ->
  13. try {ok, {SIp, _SPort}} = ssl:peername(Socket), ipToStr(SIp)
  14. catch _:_ ->
  15. "0.0.0.0"
  16. end
  17. end.
  18. ipToStr({A, B, C, D}) ->
  19. <<_:8, IpStr>> = <<<<".", (integer_to_binary(O))/binary>> || O <- [A, B, C, D]>>,
  20. IpStr;
  21. ipToStr(Ip) ->
  22. <<_:8, IpStr>> = <<<<":", (integer_to_binary(O, 16))/binary>> || O <- tuple_to_list(Ip)>>,
  23. IpStr.
  24. %% 获取ip
  25. socketToIpTuple(Socket) ->
  26. try {ok, {TIp, _TPort}} = inet:peername(Socket), TIp
  27. catch _:_ ->
  28. try {ok, {SIp, _SPort}} = ssl:peername(Socket), SIp
  29. catch _:_ ->
  30. {0, 0, 0, 0}
  31. end
  32. end.
  33. socket2port(Socket) ->
  34. case inet:peername(Socket) of
  35. {ok, {_, Port}} -> Port;
  36. _ -> 0
  37. end.
  38. str2ip(IP) when is_list(IP) ->
  39. [A1, A2, A3, A4] = string:tokens(IP, "."),
  40. {list_to_integer(A1), list_to_integer(A2), list_to_integer(A3), list_to_integer(A4)};
  41. str2ip(IP) when is_tuple(IP) ->
  42. IP.