.Net SendAsync всегда отправляет все данные? - PullRequest
1 голос
/ 23 марта 2009

Будет ли Socket.SendAsync всегда отправлять все данные в буфере byte[], которому назначен SocketAsyncEventArgs? Я протестировал некоторый код, но только в локальной сети, и там, кажется, так ...

Edit:
Хорошо, но всегда ли отправляются все данные перед запуском завершенного события?

единственное socket.BeginSend нет, если я правильно помню ..

Ответы [ 2 ]

1 голос
/ 23 марта 2009

Однако он попытается отправить все данные из документов на MSDN:

"Для сокетов, ориентированных на сообщения, не превышайте максимальный размер сообщения базового поставщика услуг сокетов Windows. Если данные слишком длинные для атомарной передачи через базового поставщика услуг, данные не передаются и метод SendAsync выдает SocketException с SocketAsyncEventArgs.SocketError, установленным в собственный код ошибки Winsock WSAEMSGSIZE (10040). "

Бывают случаи, когда слишком большой буфер следует разделить. Это зависит от базовой реализации сокета.

1 голос
/ 23 марта 2009

нет не будет. Здесь нужно учитывать множество факторов, включая буферизацию, тайм-ауты и т. Д. *

Самым простым для рассмотрения является ограничение на пакеты на уровне IPV4. Пакеты IPV4 имеют строгое ограничение, которое не может быть превышено (65 535 байт). Поэтому SendAsync не может поместить данные, размер которых превышает размер пакета IPV4, в один пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...