%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AA%E3%81%97%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F.png)
man getaddrinfo
:
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);
ノードまたはサービスのいずれか(両方ではない)がNULLになることがあります。
単に指定し、特定のホストに関連する利用可能なすべてのサービスを提供することはnode
理解できます。しかし、aを指定せずにaのみを指定した場合はservice
どういう意味ですかnode/host
?ネットワーク上のすべてのホストをスキャンしますか?
答え1
ノードを指定すると、1 つの特定のホストに関連する利用可能なすべてのサービスを提供することは理解できます。
絶対にしないでください。サービスがある場合、NULL
返されるaddrinfo
構造のポート/サービスはに設定されます0
。いいえホストで使用可能な各サービスの構造を返します。
しかし、ノード/ホストではないサービスのみを指定した場合はどういう意味ですか?
AI_PASSIVE
に指定されていない場合は、.ai_flags
ループデバイスのアドレスを返します(127.0.0.1
ipv4の場合、::1
ipv6の場合)。
指定された場合はAI_PASSIVE
「ワイルドカード」アドレス(0.0.0.0
ipv4の場合、::
ipv6の場合)を返します。
記事全体を読むことができます。基準AI_PASSIVE
、「フラグが指定されたら…」で始まる段落で
引用したマンページにもすべてが明確に説明されています。