Linux系统网络编程中TCP通讯socket--send导致进程被关闭

send(sockfd, buff, sizeof(buff), 0);
在linuxTCP通讯中上述send形式是常用的设置方式,但是如果在TCP链接断开后调用该send函数,多次即会导致进程结束。

解决方法
最简单的方式就是
send(sockfd, buff, sizeof(buff), MSG_NOSIGNAL);

下面说一下原因:

   linux下TCP/IP socket套接字建立后,实际上客户端与服务器端通讯是全双工,即客户端与服务器端通信各使用一个信道,而当一端关闭了信道,实际上另一边的信道是不会关闭,仍可以向里面写数据,而此时,会产生一个信号SIGPIPE,对信号的默认处理方式是:关闭当前进程。

除上述方式以外还可以重新选择对SIGPIPE信号的处理方式,最常用的处理方式,是忽略:SIG_IGN

你可能感兴趣的:(网络编程)