2009-03-23 1 views
1

に割り当てられたバッファー内のすべてのデータを常にSocket.SendAsyncに送りますか? ..私はだけ、ローカルネットワーク上のいくつかのコードをテストしてみたが、そのようであるように思わ.Net SendAsyncは常にすべてのデータを送信しますか?

編集:
[OK]をしかし、それは常に完了したイベントを実行する前に、すべてのデータを送信しますか?私は右覚えていれば

だけでsocket.BeginSendはしませんでした。..

答えて

1

それは、MSDNのドキュメントから、しかし、すべてのデータを送信しようとします:

を「メッセージ指向のソケットの場合、基になるWindowsの最大メッセージサイズを超えていないが、サービスプロバイダのソケットのデータがある場合。データが送信されず、SendAsyncメソッドがSocketAsyncEventArgs.SocketErrorをネイティブWinsock WSAEMSGSIZEエラーコード(10040)に設定してSocketExceptionをスローします。

大きすぎるバッファを分割する必要がある場合があります。基本的なソケット実装に依存します。

+0

バッファサイズを検出する方法はありますか、それとも安全なサイズがありますか? – Peter

1

をなし、それはしません。バッファリング、タイムアウトなど、多くの要素が考慮されています。

IPV4レベルでのパケットの制限が最も簡単ですが、 IPV4パケットには、65535バイトを超えることができない厳密な制限があります。したがって、SendAsyncがIPV4パケットサイズよりも大きいデータを単一のパケットにプッシュすることはできません。

関連する問題