В 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
.