に割り当てられたバッファー内のすべてのデータを常にSocket.SendAsync
に送りますか? ..私はだけ、ローカルネットワーク上のいくつかのコードをテストしてみたが、そのようであるように思わ.Net SendAsyncは常にすべてのデータを送信しますか?
編集:
[OK]をしかし、それは常に完了したイベントを実行する前に、すべてのデータを送信しますか?私は右覚えていれば
だけでsocket.BeginSend
はしませんでした。..
に割り当てられたバッファー内のすべてのデータを常にSocket.SendAsync
に送りますか? ..私はだけ、ローカルネットワーク上のいくつかのコードをテストしてみたが、そのようであるように思わ.Net SendAsyncは常にすべてのデータを送信しますか?
編集:
[OK]をしかし、それは常に完了したイベントを実行する前に、すべてのデータを送信しますか?私は右覚えていれば
だけでsocket.BeginSend
はしませんでした。..
それは、MSDNのドキュメントから、しかし、すべてのデータを送信しようとします:
を「メッセージ指向のソケットの場合、基になるWindowsの最大メッセージサイズを超えていないが、サービスプロバイダのソケットのデータがある場合。データが送信されず、SendAsyncメソッドがSocketAsyncEventArgs.SocketErrorをネイティブWinsock WSAEMSGSIZEエラーコード(10040)に設定してSocketExceptionをスローします。
大きすぎるバッファを分割する必要がある場合があります。基本的なソケット実装に依存します。
をなし、それはしません。バッファリング、タイムアウトなど、多くの要素が考慮されています。
IPV4レベルでのパケットの制限が最も簡単ですが、 IPV4パケットには、65535バイトを超えることができない厳密な制限があります。したがって、SendAsyncがIPV4パケットサイズよりも大きいデータを単一のパケットにプッシュすることはできません。
バッファサイズを検出する方法はありますか、それとも安全なサイズがありますか? – Peter