法楽日記

デジタル散策記&マインド探訪記

IPV6_V6ONLY

随分昔のこと、Linux 上で IPv6TCP の listen をすると、何故だか同じポートで IPv4 も受け付けてしまうという経験をしました。元々 IPv4IPv6 で socket を1つずつ使って listen するつもりだったので、IPv6 の socket を1つだけ使って IPv4IPv6 の両方を listen しても実用上の問題はありませんでした。ちょうど立て込んでいたこともあって、その時は原因を調べることなく終わりました(汗)。

ところがつい先日、IPV6_V6ONLY の存在を知りました。socket() と bind() の間で setsockopt() を使って IPV6_V6ONLY を on にすると、IPv6 のみを listen するそうです。今日ちょっと試してみたところ、確かにそうなりました。

どうやら IPv6 で listen した場合、OS の設定(kernel の設定)によって IPv6 のみになったり、IPv4 & IPv6 になったりするようです。今更ですが、OS の設定に関係なく要求通りの動作をするように書くべきでした…

「とりあえず動いてるし、いま立て込んでるから、調べるのは後回しにしよう!」なんてことを考えてしまうと、、結局調べることなく終わってしまいますね(涙)。。疑問に思った時はその場ですぐに調べないと、「後悔先に立たず」な結果になってしまいます。それをまたまた確認してしまった、、今日の一日でした…