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


Ruby Addrinfo.getaddrinfo用法及代碼示例


本文簡要介紹ruby語言中 Addrinfo.getaddrinfo 的用法。

用法

getaddrinfo(nodename, service, family, socktype, protocol, flags) → [addrinfo, ...]
getaddrinfo(nodename, service, family, socktype, protocol) → [addrinfo, ...]
getaddrinfo(nodename, service, family, socktype) → [addrinfo, ...]
getaddrinfo(nodename, service, family) → [addrinfo, ...]
getaddrinfo(nodename, service) → [addrinfo, ...]

以數組形式返回 addrinfo 對象列表。

此方法將節點名(主機名)和服務(端口)轉換為 addrinfo。由於轉換不是唯一的,因此結果是 addrinfo 對象的列表。

如果不打算進行轉換,nodename 或 service 可以為 nil。

family、socktype 和 protocol 是首選協議的提示。如果結果將用於帶有SOCK_STREAM 的套接字,則應將SOCK_STREAM 指定為socktype。如果是這樣, Addrinfo.getaddrinfo 返回適用於 SOCK_STREAM 的 addrinfo 列表。如果省略它們或給出 nil,則結果不受限製。

同樣,PF_INET6 作為 IPv6 的係列限製。

flags 應該是 Socket::AI_ 的按位或?常量如下。請注意,常量的確切列表取決於操作係統。

AI_PASSIVE      Get address to use with bind()
AI_CANONNAME    Fill in the canonical name
AI_NUMERICHOST  Prevent host name resolution
AI_NUMERICSERV  Prevent service name resolution
AI_V4MAPPED     Accept IPv4-mapped IPv6 addresses
AI_ALL          Allow all addresses
AI_ADDRCONFIG   Accept only if any address is assigned

請注意,隻要應用程序知道地址的使用情況,就應該指定 socktype。當省略 socktype 並將 servname 指定為整數時,某些平台會導致錯誤,因為某些端口號(例如 512)在沒有 socktype 的情況下是不明確的。

Addrinfo.getaddrinfo("www.kame.net", 80, nil, :STREAM)
#=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net)>,
#    #<Addrinfo: [2001:200:dff:fff1:216:3eff:feb1:44d7]:80 TCP (www.kame.net)>]

相關用法


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