檢視原始碼 net (核心 v10.2)
網路介面。
此模組提供網路介面的 API。
概要
函式
網路位址和服務轉換。
回傳目前主機的名稱。
取得介面位址。
取得命名空間中的介面位址。
以協定獨立的方式進行位址到名稱的轉換。
依名稱取得服務。
依名稱取得服務。
網路介面索引和名稱之間的映射。
網路介面名稱和索引之間的映射。
取得網路介面名稱和索引。
類型
-type address_info() :: #{family := socket:domain(), socktype := any | socket:type() | integer(), protocol := socket:protocol(), address := socket:sockaddr()}.
-type ifaddrs() :: #{name := string(), flags := ifaddrs_flags(), addr => socket:sockaddr(), netmask => socket:sockaddr(), broadaddr => socket:sockaddr(), dstaddr => socket:sockaddr()}.
介面位址和旗標。
此類型定義介面的位址和旗標。
注意
此映射的所有欄位不一定要存在。旗標欄位可用於測試某些欄位。例如,只有當旗標中存在
broadcast
旗標時,才會出現broadaddr
。
-type ifaddrs_filter() :: all | default | inet | inet6 | packet | link | hwaddr | ifaddrs_filter_map() | ifaddrs_filter_fun().
介面位址篩選選擇器。
all - 所有介面
default - 位址族為
inet
*或*inet6
的介面inet | inet6 | packet | link - *僅*具有指定位址族的介面
hwaddr - 位址族為
packet
*或*link
的介面
介面位址篩選選擇器 function/0
。
對於每個 ifaddrs
項目,回傳 true
以保留項目,或回傳 false
以捨棄項目。
例如,若要取得僅包含非 loopback
的 inet
介面清單
net:getifaddrs(
fun (#{ addr := #{family := inet},
flags := Flags}) ->
not lists:member(loopback, Flags);
(_) ->
false
end).
-type ifaddrs_filter_map() :: #{family := all | default | local | inet | inet6 | packet | link | [local | inet | inet6 | packet | link], flags := any | [ifaddrs_flag()]}.
介面位址篩選選擇器映射。
family
欄位只能具有(上述)指定的值(而不是 socket:domain() 的所有值)。它也可以是值的清單,以涵蓋接受任何指定族的情況。例如,如果接受 inet
或 inet6
,則可以將族設定為 [inet,inet6]
。
flags
欄位的使用方式是,介面必須存在任何提供的旗標。
例如,如果 family
設定為 inet
,且 flags
設定為 [broadcast, multicast]
,則只會列出位址族為 inet
,且旗標為 broadcast
和 multicast
的介面。
-type ifaddrs_flag() ::
up | broadcast | debug | loopback | pointopoint | notrailers | running | noarp | promisc |
master | slave | multicast | portsel | automedia | dynamic.
-type ifaddrs_flags() :: [ifaddrs_flag()].
-type name_info_flag() :: namereqd | dgram | nofqdn | numerichost | numericserv.
-type name_info_flag_ext() :: idn.
-type name_info_flags() :: [name_info_flag() | name_info_flag_ext()].
-type network_interface_index() :: non_neg_integer().
-type network_interface_name() :: string().
函式
-spec getaddrinfo(Host) -> {ok, Info} | {error, Reason} when Host :: string(), Info :: [address_info()], Reason :: term().
-spec getaddrinfo(Host, undefined) -> {ok, Info} | {error, Reason} when Host :: string(), Info :: [address_info()], Reason :: term(); (undefined, Service) -> {ok, Info} | {error, Reason} when Service :: string(), Info :: [address_info()], Reason :: term(); (Host, Service) -> {ok, Info} | {error, Reason} when Host :: string(), Service :: string(), Info :: [address_info()], Reason :: term().
網路位址和服務轉換。
此函式是 getnameinfo
的反向函式。它會將主機和服務轉換為對應的 socket 位址。
Host
和 Service
之一可以是 undefined
,但*不能*兩者皆是。
-spec gethostname() -> {ok, HostName} | {error, Reason} when HostName :: string(), Reason :: term().
回傳目前主機的名稱。
-spec getifaddrs() -> {ok, IfAddrs} | {error, Reason} when IfAddrs :: [ifaddrs()], Reason :: term().
等同於 getifaddrs(default)
。
-spec getifaddrs(Filter) -> {ok, IfAddrs} | {error, Reason} when Filter :: ifaddrs_filter(), IfAddrs :: [ifaddrs()], Reason :: term(); (Namespace) -> {ok, IfAddrs} | {error, Reason} when Namespace :: file:filename_all(), IfAddrs :: [ifaddrs()], Reason :: term().
取得介面位址。
使用引數 'Filter':取得電腦的介面位址,根據 Filter
篩選。
使用引數 Namespace
:等同於 getifaddrs(default, Namespace)
。
-spec getifaddrs(Filter, Namespace) -> {ok, IfAddrs} | {error, Reason} when Filter :: ifaddrs_filter(), Namespace :: file:filename_all(), IfAddrs :: [ifaddrs()], Reason :: term().
取得命名空間中的介面位址。
與 getifaddrs(Filter)
相同,但在指定的 Namespace
中。
-spec getnameinfo(SockAddr) -> {ok, Info} | {error, Reason} when SockAddr :: socket:sockaddr(), Info :: name_info(), Reason :: term().
-spec getnameinfo(SockAddr, Flags) -> {ok, Info} | {error, Reason} when SockAddr :: socket:sockaddr(), Flags :: name_info_flags() | undefined, Info :: name_info(), Reason :: term().
以協定獨立的方式進行位址到名稱的轉換。
此函式是 getaddrinfo
的反向函式。它會將 socket 位址轉換為對應的主機和服務。
-spec getservbyname(Name) -> {ok, PortNumber} | {error, Reason} when Name :: atom() | string(), PortNumber :: socket:port_number(), Reason :: term().
-spec getservbyname(Name, Protocol) -> {ok, PortNumber} | {error, Reason} when Name :: atom() | string(), PortNumber :: socket:port_number(), Protocol :: any | socket:protocol(), Reason :: term().
依名稱取得服務。
此函式用於取得指定服務的協定連接埠號碼。
-spec getservbyport(PortNumber) -> {ok, Name} | {error, Reason} when PortNumber :: socket:port_number(), Name :: atom() | string(), Reason :: term().
-spec getservbyport(PortNumber, Protocol) -> {ok, Name} | {error, Reason} when PortNumber :: socket:port_number(), Protocol :: any | socket:protocol(), Name :: atom() | string(), Reason :: term().
依名稱取得服務。
此函式用於取得指定連接埠號碼的協定服務名稱。
-spec if_index2name(Idx) -> {ok, Name} | {error, Reason} when Idx :: network_interface_index(), Name :: network_interface_name(), Reason :: term().
網路介面索引和名稱之間的映射。
-spec if_name2index(Name) -> {ok, Idx} | {error, Reason} when Name :: network_interface_name(), Idx :: network_interface_index(), Reason :: term().
網路介面名稱和索引之間的映射。
-spec if_names() -> {ok, Names} | {error, Reason} when Names :: [{Idx, If}], Idx :: network_interface_index(), If :: network_interface_name(), Reason :: term().
取得網路介面名稱和索引。