本文簡要介紹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 BasicSocket.send用法及代碼示例
- Ruby BasicSocket.sendmsg用法及代碼示例
- Ruby BasicSocket.shutdown用法及代碼示例
- Ruby BasicSocket.remote_address用法及代碼示例
- Ruby BasicSocket.recv用法及代碼示例
- Ruby BasicSocket.do_not_reverse_lookup用法及代碼示例
- Ruby BasicSocket.do_not_reverse_lookup =用法及代碼示例
- Ruby BasicSocket.connect_address用法及代碼示例
- Ruby BasicSocket.recv_nonblock用法及代碼示例
- Ruby BasicSocket.recvmsg用法及代碼示例
- Ruby BasicSocket.getsockopt用法及代碼示例
- Ruby BasicSocket.getpeereid用法及代碼示例
- Ruby BasicSocket.local_address用法及代碼示例
- Ruby BasicSocket.close_read用法及代碼示例
- Ruby BasicSocket.getpeername用法及代碼示例
- Ruby BasicSocket.getsockname用法及代碼示例
- Ruby BasicSocket.close_write用法及代碼示例
- Ruby BasicSocket.for_fd用法及代碼示例
- Ruby BasicSpecification.require_paths用法及代碼示例
- Ruby BasicObject.equal?用法及代碼示例
- Ruby BasicObject.instance_eval用法及代碼示例
- Ruby BasicObject.obj ==用法及代碼示例
- Ruby BasicObject.method_missing用法及代碼示例
- Ruby BasicObject.singleton_method_undefined用法及代碼示例
- Ruby BasicObject.send用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 BasicSocket.setsockopt。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。