localhostのコネクションが切れる
上に書いたWindowsXP上でのJavaの問題についての補足。
要するに、以下のバグのこと。
Bug Id: 4400936
Synopsis: local socket connection gets "SocketException" when machine leaves network
クライアントアプリケーションがlocalhostのサーバーに接続しているとき、ネットワークケーブルが抜けるとlocalhostのコネクションまで切れてしまうのだ。
State: Closed, will not be fixed
ということなので、改善される見込みはない。
この問題についてはいろいろと試した。
- ネットワークケーブルを抜いた数秒後にコネクションが切れる
- WindowsNT/Windows2000ではコネクションが切れることはない(上記BugReportではWindows2000でも切れると言っているが)
- WindowsXPだとコネクションが切れる
- 抜いた直後は通信できているが数秒後に切れる
- 切れないコネクションもある
- ケーブルを抜いた状態でコネクションを作れば、ケーブルを挿して抜いても切れない
という感じで、Microsoftの七不思議のひとつに出会えたらしい。
こんな問題、はっきり言っていくら調べたところで修正できるものではない。(Microsoftとのサポート契約の種類によっては可能かもしれないが)
なお、この問題はコネクションを張ったままにするアプリケーションで発生する問題なので、HTTPでは問題ない。もしかすると、Webアプリがlocalhost上のDBを使用していて、DBとのコネクションを繋ぎっぱなしにしているとすれば同様の問題が発生するかもしれない。(DBのドライバがカバーしてくれているかもしれないが)
Webサーバの場合はおかしくなったらさっさと再起動させるから、ここまで調べることはなさそうだけど。