Если send()
возвращает <0, будь то для <code>EWOULDBLOCK / EAGAIN
или любой другой ошибки, то байты 1 вообще не принимаются для отправки. Если бы какие-либо байты были приняты, возвращаемое значение send()
было бы> 0, чтобы сообщить фактическое количество байтов.
1: Я говорю принято , потому что фактическая передача делается в фоновом режиме на досуге ядра. send()
просто помещает байты в исходящий буфер сокета, чтобы ядро могло передать их позже.
Возможность частичной отправки зависит от типа сокета.
Потоковый сокет, как и TCP, допускает частичную отправку, да. Он займет столько байтов, сколько может, и вернет, сколько байтов было фактически занято, если не возникнет ошибка.
Сокет дейтаграммы, как и для UDP, не позволяет частичную отправку, нет. Все или ничего.