getopts(Socket, Options) -> {ok, OptionValues} | {error, posix()}
Socket = socket()
Options = [socket_getopt()]
OptionValues = [socket_optval()]
获取套接字的一个或多个选项。有关可用 inet 选项的列表,请参见setopts/2
。另请参阅引用的协议特定类型的说明
socket_optval()
.
返回的 OptionValues
列表中的元素数量不一定与要求的选项数量相对应。如果操作系统不支持某个选项,则该选项将被排除在返回的列表中。仅当无法获取套接字的选项时(即套接字已关闭或原始请求中的缓冲区大小太大),才会返回错误元组。出于向后兼容性的原因保留此行为。
原始选项请求 RawOptReq = {raw, Protocol, OptionNum, ValueSpec}
可用于获取有关模拟器未(明确)支持的套接字选项的信息。使用原始套接字选项使代码不可移植,但允许 Erlang 程序员利用特定平台上存在的不寻常函数。
RawOptReq
由标记 raw
组成,后跟协议级别、选项号以及要存储选项值的缓冲区的二进制或大小(以字节为单位)。当底层 getsockopt
需要在参数字段中输入时,将使用二进制文件。在这种情况下,二进制大小将对应于返回值所需的缓冲区大小。 RawOptReq
中提供的值对应于 C 套接字 API 中 getsockopt
调用的第二个、第三个和第四个/第五个参数。存储在缓冲区中的值以二进制 ValueBin
形式返回,其中所有值均按本机字节序进行编码。
请求和检查原始套接字选项需要有关当前操作系统和 TCP 堆栈的低级信息。
例子:
考虑一台 Linux 机器,其中选项 TCP_INFO
可用于收集套接字的 TCP 统计信息。假设您对在请求 TCP_INFO
时填写的 struct tcp_info
字段 tcpi_sacked
感兴趣。为了能够访问此信息,您需要了解以下信息:
- 协议级别的数值
IPPROTO_TCP
- 选项
TCP_INFO
的数值 struct tcp_info
的大小- 特定字段的大小和偏移量
通过检查头文件或编写一个小C程序,发现IPPROTO_TCP
为6,TCP_INFO
为11,结构体大小为92(字节),tcpi_sacked
的偏移量为28字节,值为32 位整数。以下代码可用于检索该值:
get_tcpi_sacked(Sock) ->
{ok,[{raw,_,_,Info}]} = inet:getopts(Sock,[{raw,6,11,92}]),
<<_:28/binary,TcpiSacked:32/native,_/binary>> = Info,
TcpiSacked.
最好在执行与此代码类似的任何内容之前检查机器类型、操作系统和内核版本。
相关用法
- erlang getopts()用法及代码示例
- erlang get用法及代码示例
- erlang get()用法及代码示例
- erlang get(Key)用法及代码示例
- erlang get_keys()用法及代码示例
- erlang get_keys(Val)用法及代码示例
- erlang get(Q :: queue(Item))用法及代码示例
- erlang get_r(Q :: queue(Item))用法及代码示例
- erlang get_object_code(Module)用法及代码示例
- erlang get(Key, Map)用法及代码示例
- erlang get(Key, Map, Default)用法及代码示例
- erlang get_argument(Flag)用法及代码示例
- erlang groups_from_list(KeyFun, List)用法及代码示例
- erlang groups_from_list(KeyFun, ValueFun, List)用法及代码示例
- erlang sin用法及代码示例
- erlang cos用法及代码示例
- erlang tan用法及代码示例
- erlang asin用法及代码示例
- erlang acos用法及代码示例
- erlang atan用法及代码示例
- erlang exp用法及代码示例
- erlang log用法及代码示例
- erlang abs用法及代码示例
- erlang float用法及代码示例
- erlang Is_float用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 getopts(Socket, Options) -> {ok, OptionValues} | {error, posix()}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。