+ -
当前位置:首页 → 问答吧 → 请教下, 大家在写网络方面的程序时一般要处理哪些信号?怎么处理

请教下, 大家在写网络方面的程序时一般要处理哪些信号?怎么处理

时间:2010-08-26

来源:互联网

本帖最后由 aobai 于 2010-08-26 23:09 编辑

因为看别人的项目感觉他们对信号的处理很仔细。

     而自己写相关的代码时很少考虑这方面的内容, 比如用了send() 函数发数据, 然后发现程序退出
     了才想起没有忽略SIGPIPE信号, 我想应该一开始就对信号做必要的处理,而且最好能够全面些,养成好的习惯。

作者: aobai   发布时间: 2010-08-26

程序开始时忽略SIGPIPE
signal(SIGPIPE, SIG_IGN);


在accept、send、resv函数后如果发生错误,检查errno是否是EINTR,如果是则需要重试,如下所示
do
{
        int ret = ::recv(m_fd, databuf,len, 0);
        if (ret == 0) //connect broken
        {
                return EPIPE;
        }
        else if (ret < 0)
        {
                if (errno == EINTR) continue;
        }
}while (ret > 0);

作者: osdba   发布时间: 2010-08-26