Я могу думать об этих возможных ответах:
- Пока данные не будут записаны в какой-то внутренний буфер в стеке IP.
- Пока данные не будут отправлены по сети.
- Пока не будет получено подтверждение приема от другой машины.
Я могу думать об этих возможных ответах:
Пока данные не будут записаны в буфер отправки на стороне отправителя.
Таким образом, если буфер заполнен, он будет заблокирован.
Буфер отправки может быть заполнен, если он еще не передал данные из-за проблем с сетью или из-за того, что буфер приема заполнен на стороне получателя.
Вы можете провести эксперимент: создать отправителя и получателя, установить буфер отправки сокета отправителя на что-то маленькое, а буфер приема получателя на что-то маленькое.
Начать отправку, принять соединение на стороне получателя, но не получать. Сокет будет заблокирован, когда количество отправленных байтов будет равно SenderSendBuffer + ReceiverReceiveBuffer.
NetworkStream
не буферизует данные. В конечном итоге вызов NetworkStream.Write
преобразуется в сокет send вызов функции. Статья MSDN для этой функции гласит:
Успешное завершение функции отправки не означает, что данные были успешно доставлены и получены получателем. Эта функция указывает только на то, что данные были успешно отправлены.
Отвечает ли это на ваш вопрос?