dポイントプレゼントキャンペーン実施中!

自宅に固定IPを取得したサーバーがあります。(ubuntu server)
そこには、以下のようなプログラムが動いています。(言語はここでは重要でないので特定しません)
listen(ポート番号);
try {
socket=accept();
for {
buf=socket.read();
socket.write(buf);
}
} finally {
socket.close();
}
ふつうのエコーをおこなう機能と思ってください。
これをバックグラウンドで動作させると、最初のうちは正しくクライアントのほうに
打った文字が表示されるのですが、あるときからサーバーからクライアントに
writeしているのに、クライアントはそれを受け取らなくなり、表示されません。
例外なども発生していないので、コネクションは張られていると思います。
このとき、以下のようなことを考えていますが、これ以上どうやって調べていいのかわかりません。
・サーバー側のルータのハード的故障
・サーバのハード的故障
・クライアントのハード的故障
・ルータのタイムアウト
・サーバーのタイムアウト
・クライアントのタイムアウト
もしかしたら違う原因も考えられるかもしれませんが。。

このような場合、どのようにして問題を解決すればいいのでしょうか?
また、linuxのコマンドで調べる方法などありましたら、教えてください。

A 回答 (1件)

まず、たぶん何度やっても同じような現象が起きているでしょうから、ハード的故障ではないでしょう。


ハード故障ならば、普通2度とつながらなくなるはずです。
また、タイムアウトもまずありません。
ハード的につながっている限りは、通信していなくてもタイムアウトになることはありません。
ところで、プログラムを見るともの凄い速度でreadとwriteを繰り返しています。
これでは、当然輻輳が発生します。
sleepを入れるなどして、一定間隔で通信すればたぶん問題解決すると思います。

この回答への補足

すいません。。説明不足でした。
記載したソース内のreadは同期された関数を想定しています。
文字列が受信されるまでは、待ち状態になっています。

記載したソースではタイムアウトの設定をおこなっていないため(デフォルトではタイムアウトの設定は無効になっています)、アプリ上タイムアウトになっていないかもしれませんが、
OSでタイムアウトにしている可能性は考えられますか?
というのも、数分おきにクライアントから任意のパケットを送りつけていると、問題の現象が発生しませんでした。

あと、別件で気になるのはsshでクライアントから上記サーバにアクセスし、
emacsなどで文字を書いていると、数分後(ある決まった時間ではない)
文字が打てなくなり、数秒間待つとバッファにたまった文字が一気に書き込まれるという現象がおきます。(sshd,sshのタイムアウトの設定は適切におこなっているつもりです。)

これといって調べる手段が思い浮かびません。。

補足日時:2010/06/18 11:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!