2011-07-17 4 views
1

.NET High-Performanceソケットで作業している間に、この奇妙な問題が発生しました。 AcceptAsync()オペレーションを介して新しいソケットを取得した直後に、[Available]プロパティは0以外の値(通常は64)と等しいです。詳しく見ると、使用可能なバイトの値はすべてSocketのバッファは0に設定されます。なぜAcceptAsync()から返された直後にSocketのAvailable> 0ですか?

クライアント側で実行されるのはConnectAsync()だけです。いいえSendAsync()、何もありません。

Nagleの有効状態に関しては、これが保持されます。

誰でもこの問題が発生しましたか?

P .:必要に応じて&にいくつかのコードを投稿しますが、大きなスニペットのようです。

答えて

0

私はこれに自分自身で答えるでしょう。

クライアントがサーバーに接続するために使用するSocketAsyncEventArgsインスタンスの[Count]プロパティ(SAEAの共有バッファに設定されたバイト数)が0より大きい。実際には、クライアントによって開始されたConnectAsync AcceptAsync()のI/Oコールバックが、[BytesTransfered]値が指定された[Count]の値と同じようにサーバ上で呼び出されるようにします(実質的に "セットバッファを一度に接続して送信")。

関連する問題