- - PR -
ソケットの送信処理でフリーズ
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-12 07:16
相手側のバッファ空きまち状態で送信が完了しない可能性はありうる と思います 送受信データの内容(データ長・受信間隔等)を確認するためです ループ内でlistenSock()をする必要があるのでしょうか? ServerSocketはスレッド内で1回newすればいいように思います [ メッセージ編集済み 編集者: 未記入 編集日時 2006-09-12 08:06 ] | ||||
|
投稿日時: 2006-09-12 10:26
試しに送信しつづけるアプリと受信(read)しないアプリを作ってみたところ、
一定量送信したところで、送信は止まりました。 現象としてはよく似ています。 しかし、このアプリでは、一回受信し、応答を送信すると、コネクションを切断します。 受信バッファは、接続時に割り当てられるものと認識しています。 相手側の受信は、一回だけで、応答は数バイト程度ですし、バッファが一杯になるはずはないと思います。 でも、現象としてはよく似ているので、相手側のアプリの動作を確認してみます。 とても参考になりました。ありがとうございます。
ループ内でlistenSock()を行っているのは、 Accept後はListen用のポートは閉じて欲しいという要望があったためです。 なにか問題となりますでしょうか? [ メッセージ編集済み 編集者: サトウ 編集日時 2006-09-12 10:29 ] | ||||
|
投稿日時: 2006-09-13 06:47
なぜそういう仕様にするかを把握しておいたほうがいいかと思います。 ほかにはlisten()でm_srvSock.setSoTimeout(3000); とありますが acceptのt.oですぐにlistenSock()を実行するとbindでエラー(例外)になります 最初の質問にあった確認方法はnetstat等でポートの状態をみるという方法もあります |