open(Port) -> {ok, Socket} | {error, Reason}
open(Port, Opts) -> {ok, Socket} | {error, Reason}
Port = inet:port_number()
Opts = [inet:inet_backend() | open_option()]
Socket = socket()
Reason = system_limit | inet:posix()
将 UDP 端口号 (Port
) 与调用进程关联。
可以使用以下选项:
list
-
收到的
Packet
以列表形式传送。 binary
-
收到的
Packet
以二进制形式交付。 {ip, Address}
-
如果主机有多个网络接口,则此选项指定使用哪一个。
{ifaddr, Address}
-
与
{ip, Address}
相同。如果主机有多个网络接口,则此选项指定使用哪一个。但是,如果这是一个
socket:sockaddr_in()
或者socket:sockaddr_in6()
这优先于之前用ip
选项。如果ip
选项来了后ifaddr
选项,它可用于更新其对应的字段ifaddr
选项(addr
场地)。 {fd, integer() >= 0}
-
如果在未使用
gen_udp
的情况下以某种方式打开了套接字,请使用此选项为其传递文件说明符。如果Port
不设置为0
和/或{ip, ip_address()}
与该选项组合,则fd
打开后绑定到指定的接口和端口。如果未指定这些选项,则假定fd
已正确绑定。 inet6
-
设置 IPv6 的套接字。
inet
-
设置 IPv4 的套接字。
local
-
设置 Unix 域套接字。看
inet:local_address()
{udp_module, module()}
-
覆盖使用哪个回调模块。对于 IPv4,默认为
inet_udp
;对于 IPv6,默认为inet6_udp
。 {multicast_if, Address}
-
设置多播套接字的本地设备。
{multicast_loop, true | false}
-
当
true
时,发送的多播数据包将循环回本地套接字。 {multicast_ttl, Integer}
-
选项
multicast_ttl
更改传出多播数据报的 time-to-live (TTL),以控制多播范围。TTL 为 1 的数据报不会转发到本地网络之外。默认为
1
。 {add_membership, {MultiAddress, InterfaceAddress}}
-
加入多播组。
{drop_membership, {MultiAddress, InterfaceAddress}}
-
离开多播组。
Opt
返回的套接字Socket
用于从该端口发送数据包send/4
。当 UDP 数据包到达打开的端口时,如果套接字处于活动模式,则数据包将作为消息传递到控制进程:
{udp, Socket, IP, InPortNo, Packet} % Without ancillary data
{udp, Socket, IP, InPortNo, AncData, Packet} % With ancillary data
该消息包含一个AncData
字段(如果有任何套接字)选项
recvtos
,recvtclass
或者recvttl
是活跃的,否则不活跃。
如果套接字不处于活动模式,则可以通过以下方式检索数据:recv/2,3
调用。请注意,到达的 UDP 数据包如果长于接收缓冲区选项指定的长度,可能会被截断而不发出警告。
当一个套接字插入{active, N}
模式(参见setopts(Socket, Options)有关详细信息),过渡到被动({active, false}
) 模式下,控制进程通过以下形式的消息进行通知:
{udp_passive, Socket}
IP
和InPortNo
定义Packet
的来源地址。如果指定了选项 list
,则 Packet
是字节列表。如果指定了选项 binary
,则 Packet
是二进制文件。
接收缓冲区选项的默认值为 {recbuf, 8192}
。
如果Port == 0
,底层OS分配一个空闲的UDP端口,使用inet:port/1
来检索它。
相关用法
- erlang open()用法及代码示例
- erlang out(Q1 :: queue(Item))用法及代码示例
- erlang out_r(Q1 :: queue(Item))用法及代码示例
- erlang sin用法及代码示例
- erlang cos用法及代码示例
- erlang tan用法及代码示例
- erlang asin用法及代码示例
- erlang acos用法及代码示例
- erlang atan用法及代码示例
- erlang exp用法及代码示例
- erlang log用法及代码示例
- erlang abs用法及代码示例
- erlang float用法及代码示例
- erlang Is_float用法及代码示例
- erlang Is_Integer用法及代码示例
- erlang len用法及代码示例
- erlang equal用法及代码示例
- erlang concat用法及代码示例
- erlang chr用法及代码示例
- erlang str用法及代码示例
- erlang substr用法及代码示例
- erlang left用法及代码示例
- erlang all用法及代码示例
- erlang any用法及代码示例
- erlang append用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 open(Port) -> {ok, Socket} | {error, Reason}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。