管道编程中遇到的Broken pipe问题
时间:2007-01-09 来源:白石
管道编程中遇到的Broken pipe问题
在调试数据库模块和WNC模块历史数据通讯的时候,由于WNC模块管道接收来不及(可能是WNC与上位机的SOCKET连接失败,没有及时取走管道中的历史数据),经常出现broken pipe错误,同时导致数据库模块异常退出。
知道了问题就好办了。UNIX的系统是采用信号机制向进程通知这种系统错误的,13 SIGPIPE 的默认操作是Exit,所以在程序里面写一个自己的信号处理函数,不让进程退出就OK。不过值得注意的是在截获一次信号以后,系统会把信号处理又恢复到默认状态,所以需要再次设置。另外,对于多线程,我是在主线程里面做的信号处理,其他线程没有做,但是我理解信号是发给进程的,所以应该只要有一个线程处理了信号就可以。
源码:
void InitSignal(void); |
相关阅读 更多 +
排行榜 更多 +