查看源代码 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
,则 family 可以设置为 [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
的逆函数。它将主机和服务转换为相应的套接字地址。
Host
和 Service
之一可以为 undefined
,但不能两者都为 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
的逆函数。它将套接字地址转换为相应的主机和服务。
-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().
获取网络接口名称和索引。