とっても久しぶりの日記です。
2連休はとてもあっさり過ぎ去ってしまいました。土曜日は前日の飲み会で少し飲みすぎたため、ゆっくりしていて過ぎ去り、日曜日は大阪・日本橋へ行こうとするも雨が降り結局家でおとなしくしていることに。
最近はIPv6にはまっています。来年からIPv6がNTTでも少しずつ配布が始まるらしく、そろそろ開発者としても覚えなければならないかなという衝動に駆られています。
プログラミングする上ではIPv6はIPv4とそれほど変わりません。 ・IPアドレスやホスト名の名前解決にgetaddrinfo()やfreeaddrinfo()という関数を使う必要がある。
(これらはIPv4の名前解決としても使用可能)。ただ、Visual Studio 6にはこの関数はヘッダーファイルなどに定義されていないようで、Visual Studio .NET(2002)以降が必要です。
・IPv4とIPv6にはstruct sockaddr_inとstruct sockaddr_in6があるが、struct sockaddrを引数に持つ部分にはstruct sockaddr_storageを使用するよう書き換える。(IPv4、IPv6用の各構造体よりサイズがでかい何でも構造体というのが増えてます)
・クライアントはconnect()、サーバはbind()、accept()の処理を書き換える必要がある。 サーバはIPv4専用、IPv6専用ならAF_INETを書き換えて、struct sockaddr部分を書き換えればよいですが、IPv4、IPv6を両方の接続に対応するにはbindを複数する必要があります。(IPv4とIPv6で両方同時に同じポート番号でbindが実は可能です。TCPとUDPは別々にbindできるんだからそりゃそうかもね・・・)
注意事項としては、IPv6はWindows 2000は正式対応(テクノロジープレビューがあるにはある)していませんので、Windows XP SP1以降、Windows Server 2003以降を使用しないとIPv6は使えません。また、Windows XPではデフォルトでIPv6はインストールされていないので、
コマンドプロンプトで「ipv6 install」
と入力してIPv6機能をインストールする必要があります。(Windows Vistaは最初からIPv6は有効)
IPv4はすぐには消滅しないとはいえ、新しいIPv6を少しずつ覚えていくのはどうでしょう〜。