仕事で、ひょんなことから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。
“拡張性に優れて修正不要な設計原則"の意味。
addrinfo構造体は今後のアドレスファミリーが増えた場合にも備えて、
sockaddr構造体を、ポインタとして保持するという設計が、
拡張性を考慮しているんだなーと思った。