Хотя он работает нормально в 100% случаев, и я иногда вижу приятное увеличение скорости в 2 раза ( примерно в 1/5 раза) sendfile() возвращает -1, а для errno установлено значение ESPIPE. ОС — Ubuntu 20.04.6, ядро LTS 5.4.0. Вот фрагмент кода ключа (настройка и проверка ошибок удалены для краткости):
Код: Выделить всё
int sock_fd = accept (svr_socket, (struct sockaddr *)&cli_socket, &cli_len);
const char *filename = "myfile";
int file_fd = open (filename, O_RDONLY);
struct stat stat_buf;
fstat (file_fd, &stat_buf);
size_t n_sent = 0;
ssize_t n_s = 0;
while ((n_s = sendfile (sock_fd, file_fd, NULL, stat_buf.st_size - n_sent)) > 0)
n_sent += n_s;
if (n_s < 0)
printf ("%s: sendfile: %ld
Подробнее здесь: [url]https://stackoverflow.com/questions/78649031/linux-sendfile-sometimes-reports-espipe[/url]
Мобильная версия