AI_ADDRCONFIGを指定してgetaddrinfo()を呼び出したとき、ちょっと前まではIPv6,IPv4の順番でリストが返ってきてたけど、最近(Debian squeezeくらいから?)ではIPv4,IPv6の順にリストが返ってくるようになった。
今まではリストの先頭だけ使ってIPv6環境なら自動的にIPv6サーバになるようにしてたけど、これからはこの方法は使えなくなった。
struct addrinfo hints = { .ai_flags = AI_PASSIVE | AI_ADDRCONFIG, .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM, } result = getaddrinfo( NULL, "5000", &hints, &ai ); // ポート5000で待ち受けしたい if( result!=0 ){ fprintf( stderr,"getaddrinfo: %s\n", gai_strerror(result) ); return -1; } // 取得したリストを見てみる struct addrinfo *tmpai; for( tmpai=ai; tmpai!=NULL; tmpai=tmpai->ai_next ){ switch( tmpai->ai_family ){ case AF_INET: printf("ai_family = AF_INET\n" ); break; case AF_INET6: printf("ai_family = AF_INET6\n" ); break; default: printf("ai_family = %d\n",tmpai->ai_family ); } } freeaddrinfo(ai);
ai_family = AF_INET ai_family = AF_INET6