当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang open(Port)用法及代码示例


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

参看setopts(Socket, Options).

返回的套接字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}

IPInPortNo 定义Packet 的来源地址。如果指定了选项 list,则 Packet 是字节列表。如果指定了选项 binary,则 Packet 是二进制文件。

接收缓冲区选项的默认值为 {recbuf, 8192}

如果Port == 0,底层OS分配一个空闲的UDP端口,使用inet:port/1来检索它。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 open(Port) -> {ok, Socket} | {error, Reason}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。