- PR -

ソケットの送信処理でフリーズ

投稿者投稿内容
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2006-09-12 07:16
引用:

これは、ネットワーク的なトラブルを疑ってみろということでしょうか?


相手側のバッファ空きまち状態で送信が完了しない可能性はありうる
と思います

送受信データの内容(データ長・受信間隔等)を確認するためです
ループ内でlistenSock()をする必要があるのでしょうか?
ServerSocketはスレッド内で1回newすればいいように思います


[ メッセージ編集済み 編集者: 未記入 編集日時 2006-09-12 08:06 ]
サトウ
会議室デビュー日: 2006/01/17
投稿数: 17
投稿日時: 2006-09-12 10:26
試しに送信しつづけるアプリと受信(read)しないアプリを作ってみたところ、
一定量送信したところで、送信は止まりました。
現象としてはよく似ています。

しかし、このアプリでは、一回受信し、応答を送信すると、コネクションを切断します。
受信バッファは、接続時に割り当てられるものと認識しています。
相手側の受信は、一回だけで、応答は数バイト程度ですし、バッファが一杯になるはずはないと思います。
でも、現象としてはよく似ているので、相手側のアプリの動作を確認してみます。
とても参考になりました。ありがとうございます。


引用:

ループ内でlistenSock()をする必要があるのでしょうか?
ServerSocketはスレッド内で1回newすればいいように思います



ループ内でlistenSock()を行っているのは、
Accept後はListen用のポートは閉じて欲しいという要望があったためです。
なにか問題となりますでしょうか?


[ メッセージ編集済み 編集者: サトウ 編集日時 2006-09-12 10:29 ]
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2006-09-13 06:47
引用:

ループ内でlistenSock()を行っているのは、
Accept後はListen用のポートは閉じて欲しいという要望があったためです。
なにか問題となりますでしょうか?


なぜそういう仕様にするかを把握しておいたほうがいいかと思います。

ほかにはlisten()でm_srvSock.setSoTimeout(3000); とありますが
acceptのt.oですぐにlistenSock()を実行するとbindでエラー(例外)になります

最初の質問にあった確認方法はnetstat等でポートの状態をみるという方法もあります

スキルアップ/キャリアアップ(JOB@IT)