仕事で、ひょんなことからIPv6のコーディングが必要になったので、読んでみた。

IPv6ネットワークプログラミング (network technology series) https://amzn.to/2ZbyVCy

この本のよいところは、IPv4からIPv6へ移植する方法が豊富なコードとともに紹介されているのところだ。言語はC言語。

IPv6に関する知識的な部分よりも、実装方法があるところがよい。
個人的には、手っ取り早く実装して定時退社したいという考えなので、そんな思いに合致した。

前半では、IPv4からv6へ移行するための新しい関数や構造体が解説されている。
getaddrinfo関数の使い方やsockaddr構造体の使い方など、ことこまかく解説されている。

こういう知識はネット上にも探せばあるのだけれども、ネットの情報は断片的なので、本にまとまっている知識を読んだほうがずっとはやく吸収できる。

さらには、この関数たちはIPv6へ移植するときはもう使ってはいけないとか、こうやって移植するんだよという例も紹介されている。

addrinfo構造体はOpen-Closed Principleに従っている?

IPv6への移植だけではなくて、今後さらにアドレスファミリーが増えたときにも拡張できるような、より汎用的な方法が紹介されている。

  • Switch文はなるべくつかわないようにしよう
  • sockaddr_in/in6ではなく、sockaddr_strorage構造体をつかいましょう

C言語のソケットプログラミングで使うaddrinfo構造体が、
Open-Closed Principleな構造なことであることに気づいた。

Open-Closed Principle、略してOCP。
“拡張性に優れて修正不要な設計原則"の意味。

開放/閉鎖原則 - Wikipedia

addrinfo構造体は今後のアドレスファミリーが増えた場合にも備えて、
sockaddr構造体を、ポインタとして保持するという設計が、
拡張性を考慮しているんだなーと思った。