免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5362 | 回复: 12
打印 上一主题 下一主题

socket,send或write时无故死掉,没有任何提示 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 11:27 |只看该作者 |倒序浏览
socket,send或write时无故死掉,没有任何提示
是一个多路复用的服务器程序,大致流程是这样:
接到一个新请求,accept一个socket
socket读监听,异常监听
可读,读取内容,读完清除读监听,加入写监听
可写,写应答内容,经常就在这里死掉了,没有报错,也不生成core文件,就突然死掉了
下面是写应答的代码:
        while(totalsend < nbytes) {
                cerr << "totalsend=" << totalsend << ",nbytes=" << nbytes << endl;
                dsend = send(sockfd, request + totalsend, nbytes - totalsend,0); //就在这行断掉
                cerr << "dsend=" << dsend << endl;
                if(dsend==-1) {
                        fprintf(stderr, "\tsend error!%s\n", strerror(errno));
                        close_connection(sockno);
                        return;
                        //exit(0);
                }
                totalsend+=dsend;
                //fprintf(stdout, "\n\tRequest.%d  bytes send OK!\n",  totalsend);
        }

论坛徽章:
0
2 [报告]
发表于 2008-08-15 11:35 |只看该作者
我猜测你写数据的时候对端已经关闭了socket, 这时产生了SIGPE信号, 造成程序退出.

论坛徽章:
0
3 [报告]
发表于 2008-08-15 11:40 |只看该作者
原帖由 converse 于 2008-8-15 11:35 发表
我猜测你写数据的时候对端已经关闭了socket, 这时产生了SIGPE信号, 造成程序退出.

那要如何判断呢,用getsockopt吗
还有就是我这个程序原来运行在freebsd4.7上,运行几个月,从来不出问题
现在移到新机器上freebsd7.0上就出现了这个问题

论坛徽章:
0
4 [报告]
发表于 2008-08-15 11:42 |只看该作者
对方关闭的情况很有可能,因为很多次在读的时候都提示这个错误
Connection reset by peer
但也不是绝对
我怎么预防呢,我是看到可写事件才写的啊,一写就出错

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-08-15 11:43 |只看该作者
被SIGPIPE杀了吧
sigaction SIGPIPE观察观察

论坛徽章:
0
6 [报告]
发表于 2008-08-15 11:55 |只看该作者
原帖由 cjaizss 于 2008-8-15 11:43 发表
被SIGPIPE杀了吧
sigaction SIGPIPE观察观察

多谢啊,我怎么就没想到呢,这几天我一直用打印的方法找错误
gdb之类不知怎么调试这类后台程序,我用gdb只会一招,就出程序崩溃后用gdb找到出错的地方

论坛徽章:
0
7 [报告]
发表于 2008-08-15 12:02 |只看该作者

回复 #5 cjaizss 的帖子

"sigaction SIGPIPE观察观察"贴一下代码吧

论坛徽章:
0
8 [报告]
发表于 2008-08-15 12:11 |只看该作者
你可以忽略SIGPIPE这个信号,或者在send的时候指定MSG_NOSIGNAL标志.

论坛徽章:
0
9 [报告]
发表于 2008-08-15 12:38 |只看该作者
2 楼说的对,,你把信号关闭

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
10 [报告]
发表于 2008-08-15 13:44 |只看该作者
以前也遇到这个问题
SIGPIPE
在CUer的指点下解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP