Для гнезда блокирования, посылают()
, требование заблокирует, пока все данные не были скопированы в буфер сетевого стека для той связи. Это не должно быть получено другой стороной. Размер этого буфера зависящий от реализации.
Данные очищены от буфера, когда отдаленная сторона признает его. Это - вещь OS и не зависит от отдаленного применение на самом деле чтение данных. Размер этого буфера также зависящий от реализации.
Когда отдаленный буфер полон, он говорит вашему местному стеку прекращать посылать. Когда данные будут очищены от отдаленного буфера (будучи прочитанным удаленным приложением) тогда, удаленная система сообщит местной системе, чтобы послать больше данных.
В обоих случаях у маленьких систем (как встроенные системы) могут быть буфера нескольких KB, или у и современных серверов меньшего размера могут быть буфера нескольких MB или больше.
Как только пространство доступно в местном буфере, больше данных из вашего посылает()
, требование будет скопировано. Как только все те данные были скопированы, ваше требование возвратится.
Вы не получите "ошибку" сброса связи (от OS - библиотеки могут сделать что-либо), если связь на самом деле не становится перезагруженной.
So... It really doesn't matter how quickly the remote application is reading data until you've sent as much data as both local & remote buffer sizes combined. After that, you'll only be able to send()
as quickly as the remote side will recv()
.