Возможно ли в Unix отправить сообщение через сокет по частям, не разделяя буфер, в котором оно находится

Возможно ли с помощью write() или send() отправить буфер (массив байт), размер которого привосходит допустимый для отправки одним сообщением, по частям, но не разделяя сам буфер на подмассивы. Иными словами, есть ли у write() механизмы, благодаря которым он запоминает на каком месте он остановился (как у read() с чтением из файла)?


Ответы (1 шт):

Автор решения: Герман Борисов

ssize_t write(int fd, const void *buf, size_t count);

Возвращает количество байт, которые отправил или код ошибки.

Если не ошибка, сами смещайте указатель buf на отправленное ранее количество байт, и уменьшайте count на то же значение.

Вызывать повторно пока уменьшенный count не сократится до нуля или не получим ошибку.

У send поведение похоже, но дополнительно настраивается флагами.

→ Ссылка