Возможно ли в Unix отправить сообщение через сокет по частям, не разделяя буфер, в котором оно находится
Возможно ли с помощью write() или send() отправить буфер (массив байт), размер которого привосходит допустимый для отправки одним сообщением, по частям, но не разделяя сам буфер на подмассивы. Иными словами, есть ли у write() механизмы, благодаря которым он запоминает на каком месте он остановился (как у read() с чтением из файла)?
Ответы (1 шт):
ssize_t write(int fd, const void *buf, size_t count);
Возвращает количество байт, которые отправил или код ошибки.
Если не ошибка, сами смещайте указатель buf на отправленное ранее количество байт, и уменьшайте count на то же значение.
Вызывать повторно пока уменьшенный count не сократится до нуля или не получим ошибку.
У send поведение похоже, но дополнительно настраивается флагами.