を設定されていないAI_PASSIVEにもかかわらず、ワイルドカードアドレスを返す...はgetaddrinfo())(getaddrinfoはのmanページから
hints.ai_flagsにAI_PASSIVEフラグが設定されていない場合、 はソケットアドレスを返しますconnect(2)、 sendto(2)、またはsendmsg(2)での使用に適しています。
しかし、一部のウェブサイトでは0.0.0.0
が返されています。ワイルドカードアドレスを取得してはいけませんか?
void checkAddresses(char * addrName)
{
struct addrinfo hints;
struct addrinfo * infoptr = 0;
struct addrinfo * node = 0;
int gai_return = 0;
int socket_fd = 0;
int gni_return = 0;
char host_buffer[255] = { 0 };
struct sockaddr_in * h = 0;
memset(host_buffer, 0, sizeof(host_buffer));
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = 0;
hints.ai_protocol = 0;
hints.ai_canonname = NULL;
hints.ai_addr = NULL;
hints.ai_next = NULL;
gai_return = getaddrinfo(addrName, 0, &hints, &infoptr);
if(gai_return != 0)
{
perror("Getaddrinfo() failure");
exit(1);
}
for (node = infoptr; node != NULL; node = node->ai_next)
{
h = (struct sockaddr_in *) node->ai_addr;
strcpy(host_buffer, inet_ntoa(h->sin_addr));
puts(host_buffer);
}
freeaddrinfo(infoptr);
}
ああ、意味があります。私は 'sockaddr_in'と' inet_ntoa'がIPv4固有のものであるとは思っていませんでした。私はループ時に区別する方法を考えなければなりません。また、ループを2回繰り返すこともできます(AF_UNSPECを使わず、代わりにIPv4とIPv5を指定しました)。ありがとう。 –