Недопустимый аргумент в 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?

Благодарю.

0 ответов

Другие вопросы по тегам