Это когда-либо возможно для C send
функционировать для возврата нуля при использовании сокетов TCP? В странице справочника просто говорится, что она возвратит число отправленных байтов, но я не уверен, возвратится ли она просто-1, когда она не сможет отправить данные.
Я почти уверен, что, хотя память уходит в глубину веков, я видел, как она возвращала ноль раньше, в ситуации массовой передачи данных, когда другой конец не был не отставать.
Из памяти, в этом случае, удаленные буферы стека TCP были заполнены, стек уведомил локальный конец, что он должен отложить, пока некоторое пространство не будет очищено, а локальные буферы также не заполнятся.
На этом этапе технически это не является ошибкой (следовательно, -1 не возвращается), но данные не могут быть приняты локальным стеком.
Я не полностью уверен, что это так, поскольку текущий стандарт Posix, кажется, указывает, что в этом случае он будет просто блокироваться (или отказывать, если он настроен на неблокирование).
Однако я подозреваю, что это спорный вопрос. У вас и есть вероятность, что он вернет на меньше байтов, которые вы запросили для отправки, и поэтому у вас должен быть код для обработки этого.
И поскольку это будет почти такая же логика, обрабатывающая «на единицу меньше, чем вы запрашивали», что и обработка «нулевых байтов», вы также можете предположить, что она может возвращать ноль.
Ну, всегда есть случай, когда вы передаете ноль в качестве количества байтов для отправки ... в этом случае «возврат количества отправленных байтов» будет означать, что он должен вернуть нулевые байты.
Вероятно, лучше всего в любом случае правильно обработать случай нулевого возврата; это не повредит, и это может помочь.
Ответ на этот вопрос может зависеть от реализации и, следовательно, зависит от операционной системы.
Одно обстоятельство, при котором ожидается 0, когда вы запрашиваете передачу 0 байтов.