WinSock (Windows Sockets) API で IPv4/IPv6 デュアル スタック プログラミングに挑戦!!(TCPクライアント編)

Platform SDK (Windows SDK) サポートの小泉です。みなさま、IPv4 アドレスが枯渇するといった話題が出てから何年も経ちましたが、IPv6 対応は既にお済でしょうか?「まだ IPv4 が使えるし、IPv6 への改修をしたらIPv4 対応しかしていない古いネットワークでは自社アプリケーションが使えなくなってしまう。IPv6 対応はまだ早いかな。。。」と心配されている方!!IPv4 ネットワークにも IPv6 ネットワークにも対応できるWinSockのプログラミング方法があったとしたら如何でしょう?今のうちに対応していれば、エンドユーザ様にも「自社のアプリケーションは、旧来の IPv4 ネットワークにも、最新の IPv6 ネットワークにも両方対応しております。将来、世の中が IPv6 ネットワークに完全移行してもアプリケーションに対する移行コストは 0 です。」と胸を張って言えますね。という事で、今回は「WinSock (Windows Sockets) API で IPv4/IPv6 デュアル スタック プログラミングに挑戦!!」と銘打って、IPv4/IPv6 の両方に対応したプログラミング方法をご紹介いたします。 1.まずはIPv4対応WinSockプログラムのおさらい まずは、一般的な IPv4 対応 WinSock プログラムのおさらいから始めましょう。ほとんどの IPv4 対応WinSockプログラム(クライアント側)は以下のような流れになっているかと思います。以下の例を見てもわかるとおり、IPv4 アドレスを直接指定しており、これでは IPv4 通信しかできませんね。  1)  WSAStartup API でソケットを初期化します例:WSAStartup(MAKEWORD(2, 2), &wsaData); 2)  Socket API で利用する IPv4 アドレスファミリとプロトコルを指定して、ソケットハンドルを作成します例:SOCKET…