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