我想在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來測試它 –