со страницы руководства recv(2)
:
MSG_WAITALL
Этот флаг запрашивает выполнение операционного блока до тех пор, пока полный запрос не будет удовлетворен. Однако вызов может по-прежнему возвращать меньше данных, чем запрошено, если сигнал перехвачен, произошла ошибка или отключение, или следующие данные, которые должны быть получены, имеют тип, отличный от возвращенного.
Не похоже, что есть эквивалентный флаг для send(2)
, что мне кажется странным. Может быть, send()
гарантированно всегда принимает весь буфер, но я не вижу, чтобы это было записано где-либо (и в любом случае, это кажется мне маловероятным).
Есть ли способ указать send()
дождаться, пока не будет отправлен весь буфер, прежде чем вернуться, что эквивалентно recv()
MSG_WAITALL
?
Редактировать: Я понимаю, что send () просто копирует данные в буфер в операционной системе, и я не могу заставить send () поместить данные в провод. У меня вопрос: могу ли я принудительно заставить send () блокироваться, пока все данные, которые я ему передал, не будут скопированы в буфер ОС?