一、一些问答
问:多线程socket程序,有时候会出现“断开的管道”而退出,也不好调试,是什么原因造成的?如何解决?
答:一般是读管道一端的进程退出了,这时候另一端试图写入这个管道,进程就会收到SIGPIPE信号。如果没有对这个信号处理,进程就会默认退出,显示broken pipe.
用了MSG_NOSIGNAL, 天下立刻太平
send(sock_fd, buff, len, MSG_NOSIGNAL);
recv(sock_fd, buff, len, MSG_NOSIGNAL);
二、关于windows和linux的可移植问题
send函数最后一个参数
windows下一般设置为0
linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可 能会导致程序退出。
阅读(1442) | 评论(0) | 转发(0) |