C文件传输问题

时间:2009-11-05 03:09:46

标签: c sockets

我实现了一个客户端服务器程序,允许传输文件。服务器使用select()来检查套接字的更改。 每个测试都很好,除了这个: - 当服务器向客户端发送一个巨大的文件(尚未完成)时,客户端按“Ctrl-C”终止客户端程序,然后服务器也被杀死:(

摘录:

fprintf(stderr,"Reading done, sending ...\n");
if(send(sockClient, sendBuf, chunk_length, 0) < 0)
{
    printf("Failed to send through socket %d \n", sockClient);
    return -1;
}
fprintf(stderr,"Sending done\n");

当客户端被终止时,服务器终端显示:

user$./server
Reading done, sending ...
Sending done
Reading done, sending ...
Sending done
Reading done, sending ...
Sending done
Reading done, sending ...
user$

它出了什么问题? 谢谢你的回答!

3 个答案:

答案 0 :(得分:4)

你可能想忽略SIGPIPE。尝试在服务器启动中添加类似的内容:

#include <signal.h>
signal(SIGPIPE, SIG_IGN);

答案 1 :(得分:0)

仅当套接字处于send()状态时才可以使用connected调用(以便知道预期的收件人)。返回是发送的bytescount ... if(send(sockClient, sendBuf, chunk_length, 0) < 0) 所以当断开连接时,它会跳过...

答案 2 :(得分:0)

MSG_NOSIGNAL不可移植,在Windows上无法使用。