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


erlang getopts(Socket, Options)用法及代碼示例


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.org大神的英文原創作品 getopts(Socket, Options) -> {ok, OptionValues} | {error, posix()}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。