客户端断开导致服务器退出的解决方法 - ZYNQ7020学习

      客户端断开导致服务器进程退出,其根本原因是由服务器端的 send 函数导致的。在 linux 下写 socket 的程序的时候,如果尝试 send 到一个 disconnected socket 上,就会让底层抛出一个 SIGPIPE 信号。这个信号的缺省处理方法是退出进程(send函数的flags参数设置为0),不会看到任何的提示。这里介绍两种解决方法。

方法一

       将flags参数设置为 MSG_NOSIGNAL。比如

if (send(client[i], "hello", 6, MSG_NOSIGNAL) == -1)
{
	perror("send");
}
        这样调用,当出现客户端断开时,这里会正常调用 perror 进行报错,但是不会直接就退出。断开的客户端对应的Socket 记得要关闭掉,至于在哪里关闭就是代码设计时候需要考虑的问题了。

方法二

       可以尝试重新定义这个信号的处理方式,使用如下

void signal_func()
{ 
}
signal(SIGPIPE,signal_func);

       这样程序就不会退出了。在 signal_func 函数内编写自己的处理代码。

猜你喜欢

转载自blog.csdn.net/yishuicanhong/article/details/80657537