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


Ruby BasicSocket.setsockopt用法及代碼示例

本文簡要介紹ruby語言中 BasicSocket.setsockopt 的用法。

用法

setsockopt(level, optname, optval)
setsockopt(socketoption)

設置一個套接字選項。這些是特定於協議和係統的,有關詳細信息,請參閱您的本地係統文檔。

參數

  • level 是一個整數,通常是 SOL_ 常量之一,例如 Socket::SOL_SOCKET,或協議級別。名稱的字符串或符號,可能沒有前綴,也被接受。

  • optname是一個整數,通常是SO_常量之一,如Socket::SO_REUSEADDR。名稱的字符串或符號,可能沒有前綴,也被接受。

  • optval 是選項的值,它作為指向特定字節數的指針傳遞給底層setsockopt()。如何完成取決於類型:

    • Integer:value被賦值給一個int,並傳遞一個指向int的指針,長度為sizeof(int)。

    • true 或 false:1 或 0(分別)分配給 int,並且 int 與 Integer 一樣傳遞。請注意,必須通過 false ,而不是 nil

    • String:將字符串的數據和長度傳遞給套接字。

  • socketoption Socket::Option 的一個實例

例子

一些套接字選項是帶有布爾值的整數,在這種情況下 setsockopt 可以這樣調用:

sock.setsockopt(:SOCKET, :REUSEADDR, true)
sock.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
sock.setsockopt(Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true))

一些套接字選項是帶有數值的整數,在這種情況下 setsockopt 可以這樣調用:

sock.setsockopt(:IP, :TTL, 255)
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255)
sock.setsockopt(Socket::Option.int(:INET, :IP, :TTL, 255))

選項值可以是結構。傳遞它們可能很複雜,因為它涉及檢查係統標頭以確定正確的定義。一個例子是 ip_mreq ,它可以在您的係統頭文件中定義為:

struct ip_mreq {
  struct  in_addr imr_multiaddr;
  struct  in_addr imr_interface;
};

在這種情況下, setsockopt 可以這樣調用:

optval = IPAddr.new("224.0.0.251").hton +
         IPAddr.new(Socket::INADDR_ANY, Socket::AF_INET).hton
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, optval)

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 BasicSocket.setsockopt。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。