私はいくつかの asio ベースのネットワーキング クラスを作成しましたが、それらは別々のプロセスで実行されている限り、期待どおりに機能します。テスト範囲を改善する過程で、受信機が通常データの受信を停止するケースに遭遇しました。私の (CxxTest) テスト スイートは単一のアプリケーションなので、
私はここにコードを投げました、 gist、それはかなり短いですが、その「要点」は次のとおりです。
create endpoint (127.0.0.1:54321, shared by rx/tx)
create service
create tx socket
open
set reusable(true)
set broadcast(true)
create rx socket
open
bind to endpoint
async_receive...
create thread(io_service::run)
send data several times
wait a few seconds
io_service::stop
thread::join
私のreceive
関数は、新しいデータをベクターにダンプして保存するだけで、受信したバイト数を含む print ステートメントも出力します。これを実行するreceive
と、予想される量のデータで 1 回の呼び出しが行われ、2 回の呼び出しが行われることもあり、 3 回の呼び出しが行われることはほとんどありません。
さて、このファイルを半分にリッピングすると、一方は送信側のみを行い、もう一方は受信側のみを行うと、うまく機能します。各パーツの無関係な貢献を削除する以外は、まったく変更はありません。
私は WireShark で見てきましたが、すべての送信が期待どおりに行われており、それらが同期しているはずなので、それは理にかなっています。受信ハンドラーは新しいものが入ってくるのを見ていないかのように、ただ静かに座っています。どのようにデータが欠落していますか? 私はasioが初めてなので、明らかにばかげたことをしているだけだと思います!