何らかの形でソケットから切断されているか、少なくともrecv()
から返された値はゼロです。問題を引き金にするようなことから、私はそれが境界外のメモリ書き込みだと思う。しかし、私はソケットの値を出力していますが、破損していません。不正なメモリ書き込みにより、recv()がゼロを返す
recv()を呼び出さずに「切断」を検出できる方法はありますか(私はすでにバイトを読み取るために呼び出しているため、コード全体で何かを検索して、 "が起こる)?
無効なメモリ書き込みが原因でrecv()
がゼロを返す可能性がありますが、ソケット記述子の値は変更されません。
なぜ範囲外の書き込みによって問題が発生していると思いますか?この場合、tcpdump/wiresharkはネットワーク上で何を表示しますか? – dbush
@dbushこれは、アプリケーションが多数のイベントを処理する場合にのみ発生するようです。イベントが少ない場合は切断されません。だから、私は "バッチ"を処理し、いくつかの大きなバッチが受信されたときに、問題が発生したように見えます。 – user997112
あなたのコードが何をしているかを推測すると思いますか? 1)きれいにコンパイルする2)問題を示す投稿コード – user3629249