私はasioを使用するときに特有の問題を理解する助けが必要です。boost asio:0バイト書き込み
私はサーバ(Javaで書かれた)に2バイトのヒアビート(例えば、毎秒)を送信するC++クライアント(boost asioを使用)を持っています。サーバは正しく2バイトのHeartBeatを受信しますが、それ以降サーバの「読み取り」は0バイトの読み取りに不満を持ち、接続を閉じます(これはブロッキングの読み込みには正しいと思われます)。しかし、クライアントは常に正しい金額を送金していることを表示します。
私は、関数の 'write'ファミリのほとんどすべての変種を実験しました。それらのすべてが 'write_some'の観点から実装されていますが、これはこの動作が期待されることを意味しますか?
私は自分の使い方で間違いを犯しているに違いありません。基本的に私はasio内で書き込み(少なくとも1バイト)を保証するものを探しています。私が間違っている場所を見つけ出すのを手伝ってください。さらに詳しい情報が必要な場合は... 何かアドバイスありがとう!感謝! ありがとう!
こんにちは、お返事ありがとうございます。 'read'はjavaサーバにあり、コードを読むと古典的な 'select'のように見えますが、その後 '(' blocking ')' read 'が続きます(EAGAINはノンブロッキングだったセット)。すべてのそれは他のJavaクライアントは問題ありません。 私はちょっと混乱していますが、通常のブロッキング読み込み呼び出しでは0バイト読み込みになります(n/wの書籍とドキュメントにはすべてeof/failureとして読み込まれます)。 ブロック書き込みは短くてもかまいませんtfrではなく、すべてのバイト)、それは今までに0のTCPのペイロードを送信することができますか? –
0を返す読み込みは、 "もう一方の端がTCP接続を閉じた"というかなり標準的な方法です。たとえば、と確認してください。 wiresharkのようなネットワークモニタ。 – nos