Chaton > Archives > 2010/04/06

2010/04/06 08:21:06 UTCshiro
#
現実的に、相手先が普通に落ちてくれるならソケットの後始末でTCPの切断プロトコルが走るから、こちら側でも検出できる。問題となるのは相手先が後始末もできない状態、たとえばkernel panicで落ちたとかネットワーク的に切断されたとかいう場合だろう。
#
さて、こういうのはあらゆるTCPアプリケーションで起き得る問題なので、gauche.netのレイヤでタイムアウトを仕込んどくのが汎用的な気もするのだが、ネットワーク層では「いつをタイムアウトの起点にするか」を知るのが難しい。
#
というのもアプリレベルでのreadはソケットの上にポートのレイヤが乗ってるので、アプリでreadを呼んだタイミングとポートから実際にデータが読まれるタイミングは対応してないからだ。
#
違った。アプリでポートから読み出すタイミングと実際にソケットからデータが読まれるタイミングは対応してないからだ。
#
まあ、問題となるのはブロックする時だけなので、ソケットに対するreadがかかるのを一律に起点としてしまってもいいかもしれない。