當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。