1

私はいくつかの 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が初めてなので、明らかにばかげたことをしているだけだと思います!

4

1 に答える 1