我想在C破裂的管道下与插座上
我打开一个数据套接字我的客户(PASV)重新编写一个FTP服务器,当它试图做一个有效的文件RETR的sendfile,我用sendfile
从问到的数据插口文件:
int fd;
struct stat s;
if (cmd->arg && (fd = open(cmd->arg, O_RDWR)) != -1)
{
fstat(fd, &s);
if ((size = sendfile(client->data_soc, fd, NULL, s.st_size))
== -1)
perror("sendfile failed:");
else
printf("datas sended\n");
close(client->data_soc);
}
客户端是一个包含数据套接字client->data_soc
已经打开的结构,CMD是客户端的命令,包含文件名,打开cmd->arg
,至极是一个char *
。
问题是,当我做到这一点,在sendfile
功能停止与SIGPIPE
。
我真的不明白为什么,我想我正确地使用它,我无法找到任何解决这个问题尤其如此。
感谢您的帮助:)
的OS,这在libc吗? – alk
当我读到以书面形式向插座的情况下“*破管*”,我倾向于说,接收器断开。 – alk
我正在使用Linux(Deepin 15.4),你是指“哪个libc”?接收器断开,因为服务器崩溃的,我就使用netcat来测试它 –