非常教程

Erlang 20参考手册

核心 | kernel

gen_udp

模块

gen_udp

模块摘要

接口到UDP套接字。

描述

该模块提供了使用UDP协议与套接字通信的功能。

数据类型

option() =

{active, true | false | once | -32768..32767} |

{add_membership, {inet:ip_address(),inet:ip_address()}} |

{broadcast, boolean()} |

{buffer, integer() >= 0} |

{deliver, port | term} |

{dontroute, boolean()} |

{drop_membership, {inet:ip_address(),inet:ip_address()}} |

{header, integer() >= 0} |

{high_msgq_watermark, integer() >= 1} |

{low_msgq_watermark, integer() >= 1} |

{mode, list | binary} |

list |

binary |

{multicast_if,inet:ip_address()} |

{multicast_loop, boolean()} |

{multicast_ttl, integer() >= 0} |

{priority, integer() >= 0} |

{raw,

Protocol :: integer() >= 0,

OptionNum :: integer() >= 0,

ValueBin :: binary()} |

{read_packets, integer() >= 0} |

{recbuf, integer() >= 0} |

{reuseaddr, boolean()} |

{sndbuf, integer() >= 0} |

{tos, integer() >= 0} |

{ipv6_v6only, boolean()}

option_name() =

active |

broadcast |

buffer |

deliver |

dontroute |

header |

high_msgq_watermark |

low_msgq_watermark |

mode |

multicast_if |

multicast_loop |

multicast_ttl |

priority |

{raw,

Protocol :: integer() >= 0,

OptionNum :: integer() >= 0,

ValueSpec ::

(ValueSize :: integer() >= 0) | (ValueBin :: binary())} |

read_packets |

recbuf |

reuseaddr |

sndbuf |

tos |

ipv6_v6only

socket()

open/1,2返回。

出口

close(Socket) -> ok

类型

关闭UDP套接字。

controlling_process(Socket, Pid) -> ok | {error, Reason}

类型

分配一个新的控制过程PidSocket。控制过程是从套接字接收消息的过程。如果被当前控制进程以外的其他进程调用,{error, not_owner}则返回。如果标识的进程Pid不是现有的本地pid,{error, badarg}则返回。{error, badarg}在某些情况下,Socket在执行此功能期间关闭时也可能会返回。

open(Port) -> {ok, Socket} | {error, Reason}

open(Port, Opts) -> {ok, Socket} | {error, Reason}

类型

将UDP端口号(Port)与调用进程相关联。

可供选择的办法如下:

list

已收到Packet以列表形式发送。

binary

收到Packet以二进制形式提供。

{ip, Address}

如果主机有多个网络接口,则此选项指定要使用的接口。

{ifaddr, Address}

{ip, Address}如果主机有多个网络接口,则此选项指定要使用的接口。

{fd, integer() >= 0}

如果套接字以某种方式打开而未使用gen_udp,请使用此选项为其传递文件描述符。如果Port没有设置0和/或{ip, ip_address()}与此选项组合,fd则在打开后绑定到指定的接口和端口。如果没有指定这些选项,则假定fd已经适当地绑定。

inet6

设置IPv 6的套接字。

inet

设置IPv 4的套接字。

local

设置Unix域套接字。见inet:local_address()

{udp_module, module()}

覆盖使用哪个回调模块。默认inet_udp为IPv4和inet6_udpIPv6。

{multicast_if, Address}

设置多播套接字的本地设备。

{multicast_loop, true | false}

true发送的多播数据包循环回到本地套接字时。

{multicast_ttl, Integer}

选项multicast_ttl更改传出多播数据报的生存时间(TTL),以控制多播的范围。

TTL为1的数据报不会被转发到本地网络之外。默认为1

{add_membership, {MultiAddress, InterfaceAddress}}

加入多播组。

{drop_membership, {MultiAddress, InterfaceAddress}}

留下一个多播组。

Opt

另见inet:setopts/2

返回的套接字Socket用于从此端口发送数据包send/4。当UDP数据包到达打开的端口时,如果套接字处于活动模式,则将数据包作为消息传递给控制进程:

{udp, Socket, IP, InPortNo, Packet}

如果套接字不处于活动模式,则可以通过recv/2,3调用检索数据。请注意,比指定接收缓冲区选项长的到达UDP数据包可能会被截断而不会发出警告。

{active, N}模式中的套接字(inet:setopts/2详情参见参考资料)转换到被动{active, false}模式时,控制进程将通过以下形式的消息得到通知:

{udp_passive, Socket}

IPInPortNo定义来自哪个地址PacketPacketlist指定选项时的字节列表。Packet是一个二进制如果binary指定选项。

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

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

recv(Socket, Length) ->

{ok, {Address, Port, Packet}} | {error, Reason}

recv(Socket, Length, Timeout) ->

{ok, {Address, Port, Packet}} | {error, Reason}

类型

从被动模式的套接字接收数据包。可选参数Timeout指定超时(以毫秒为单位)。默认为infinity

send(Socket, Address, Port, Packet) -> ok | {error, Reason}

类型

将数据包发送到指定的地址和端口。参数Address可以是主机名或套接字地址。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1