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