getaddrinfo を使用して、localhost でのみ接続を受け入れるローカル サーバーを起動しています。
struct addrinfo *res;
struct addrinfo hints = {0};
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
getaddrinfo(NULL, portbuf, &hints, &res);
これは問題なく動作するようで、IPv6 が存在する場合は IPv6 アドレス ::1 が、存在しない場合は IPv4 アドレスが返されます。
ときどき Windows 2008 R2 を除いて (少なくとも私が見た唯一のシステムですが、顧客のシステムで 2 回見ました)、IPv6 ではなく 127.0.0.1 にバインドされます!
::1 をバインドすると 127.1 と ::1 の両方の接続を受け入れるため、これは私を混乱させますが、127.1 をバインドすると IPv6 接続は受け入れられません。