В Mono 3.12 я использую Socket.SendAsync(SocketAsyncEventArgs) с потоком TCP Socket для реализации потокового протокола на основе запросов. Я использую SocketAsyncEventArgs.BufferList для установки нескольких буферов данных.
В документации для Socket и SocketAsyncEventArgs, я не могу найти никакого упоминания о том, может ли быть SocketAsyncEventArgs.Completed без отправки всех байтов, когда BufferList используется, оставляя впечатление, что мы должны проверить на SocketAsyncEventArgs.BytesTransferred.
С другой стороны, Socket.BeginSend заставляет гарантировать
Когда ваше приложение вызывает
BeginSend, система будет использовать отдельный поток для выполнения указанного метода обратного вызова и block наEndSend, покаSocketне отправит количество байтов запросил или выбрал исключение.
Какие гарантии указывает спецификация количества байтов, переданных при использовании SendAsync с SocketAsyncEventArgs.BufferList?
Предположим, что событие было завершено SocketError.Success.