2011-02-08 10 views
1

私はboost :: asioを使ってサーバアプリケーション、特にUDP APIを作成しています。今私はプールからasync_receive_fromを使用して別のバッファをリッスンする複数のスレッドを開始します。これは私が主に開発するUbuntuでうまく動作します。udp :: socket :: async_receive_fromに対する複数の並列呼び出し - 未定義の動作ですか?

しかし、Windows用にコンパイルすると、送信されたバッファごとにコールバックが何度も呼び出され、何かが見つかったという報告が1つのみであり、ゼロバイトが送信されたことが報告されます。

私はboost :: asioドキュメントを見てきましたが、書き込み/読み取りフリー関数をシリアルに呼び出さなければならないことを知っていますが、async_receive_関数が同じものであるかどうかについての情報は見つかりませんでした。

代わりにasync_receive_を1回だけ呼び出す必要がありますか?

答えて

2

それは、以前の1が完了するまで、すべてのasync_xxxの機能のために、あなたが与えられたソケット上で関数を呼び出すことはありませんしなければなりません保持している -

EDIT ...またはあなたがゴミ(または未定義の動作)になってしまいます。私はLinuxで働いています。私は間違いなくあなたが正しく働いているのを見て驚いています。

編集:ドキュメント、つまりasync_read_someコールのハンドラのように、次の読み取りをキューに入れます。

+0

ありがとうございます!私の側にはもう少し多くのコードが必要ですが、今はうまくいきます。 :) – Max

関連する問題