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}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
