我实现了一个客户端服务器程序,允许传输文件。服务器使用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$
它出了什么问题? 谢谢你的回答!
答案 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上无法使用。