Недопустимый аргумент в Sendfile с использованием сокета для выходного файла
Я хотел задать дополнительный вопрос к этому сообщению: неверный аргумент в sendfile() с двумя обычными файлами
Я пытаюсь запустить нечто подобное для ядра Linux 2.6.16, но вместо вывода в файл я пытался вывести в сокет. Я запускаю это на SLAX linux 5.1.7 и использую Slackware 11.0 для gcc и glibc.
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/sendfile.h>
int main (int argc, char* argv[])
{
int read_fd;
int write_fd;
off_t offset=0;
read_fd = open (argv[1], O_RDONLY);
write_fd = socket (PF_APPLETALK, SOCK_DGRAM,0);
sendfile (write_fd, read_fd, &offset, 2);
close (read_fd);
close (write_fd);
return 0;
}
У меня есть входной файл, который я создал в.txt, который читается как argv[1]. Я все еще получаю ошибку "sendfile(): неверный аргумент". Strace указывает, что sendfile называется sendfile(4,3,[0],2) = -1 EINVAL (неверный аргумент). Я попытался погуглить эту ошибку, и, похоже, единственные решения - это обновление до более нового ядра.
Мой вопрос заключается в том, почему sendfile работает в более новых ядрах Linux, но не в более старых, таких как 2.6.18? Кроме того, есть ли способ исправить ошибку для старого ядра Linux?
Благодарю.