断線

スイッチングHUBからLANケーブルが抜けかけてる事態が発生する。
それ自体はケーブル挿し直せば済むし、今後の運用で気を付ければ大丈夫。
問題なのは、それをアプリ側で検知するのにエラく手間取った点。
実装上の課題もあるけども、同時にコアAPIが仕様通りに動かない点も発見する。


当該の関数はjava.net.Socket#connect(endpoint, timeout)とゆーもの。

指定されたタイムアウト値を使用してこのソケットをサーバに接続します。
タイムアウトに 0 を指定すると、タイムアウトは無限と解釈されます。
その場合、接続が確立されるかエラーが発生するまで、接続はブロックされます。

JavaDocには上記のような説明があるけど、どーもタイムアウトが上手く働かない。
ケーブルが断線しててpingも通らない接続先で、どうして接続エラーが出ないのか。


とりあえず、この点の調査も含めて対応は明日検討する。
まあコアAPIの拡張までしなくても、再接続のアルゴリズムを見直せば大丈夫でしょう。
しかしテストが甘かったなあ、といつものことながら反省。