免费注册 查看新帖 |

Chinaunix

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

send挂掉 急 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-03 21:24 |只看该作者 |倒序浏览
建立连接之后,send可以正常发送数据,但是如果我直接CTrl+C干掉客户端或者客户端直接close掉sockfd,server端如果正在send的话,整个程序就会挂掉(整个程序全部退出了,我是多线程的,send是一个单独的线程在发送),如果没有正在send,那么server端就不会挂掉,请教高手,这是怎么回事?

论坛徽章:
0
2 [报告]
发表于 2011-06-03 21:29 |只看该作者
补充一下,server端挂掉的时候没有报任何错误,没有段错误啊或者其他的错误,只是从打印可以看出,send没有返回就挂掉了,而且我用select,然后FD_ISSET,每次select都返回1,然后FD_ISSET也认为可写?请问什么时候套接字是可写的,远端都关闭了,还可写么?

论坛徽章:
0
3 [报告]
发表于 2011-06-03 21:49 |只看该作者
此种情况对端客户端异常关闭,说明服务器端已经检测到对端关闭请求了。

此种情况FD_ISSET有可读事件,但此时要判断recv返回值,这个lz试下就明白了.

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-06-03 22:29 |只看该作者
忽略 SIGPIPE信号,或者send指定flags  MSG_NOSIGNAL

论坛徽章:
0
5 [报告]
发表于 2011-06-04 00:14 |只看该作者
灰常感谢楼上两位,我试试看!

论坛徽章:
0
6 [报告]
发表于 2011-06-07 09:19 |只看该作者
回复 4# hellioncu


    谢谢这位兄弟,我send的时候使用了标志MSG_NOSIGNAL,现在可以了,不过我想问问这个和屏蔽管道信号SIGPIPE有什么区别呢,这个是会屏蔽所以的信号么?这样会不会有什么影响,我用sigaction来扑捉SIGPIPE好像没有扑捉到,因为网上说用signal来忽略信号的话,只有一次有效,所以我就用sigaction了,不过可能是哪里没有弄对,所以好像没有扑捉到信号。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2011-06-07 09:21 |只看该作者
回复  hellioncu


    谢谢这位兄弟,我send的时候使用了标志MSG_NOSIGNAL,现在可以了,不过我想问问 ...
jiangsheng84 发表于 2011-06-07 09:19



    指定了MSG_NOSIGNAL,不会产生这个信号

论坛徽章:
0
8 [报告]
发表于 2011-06-07 20:50 |只看该作者
回复 7# hellioncu


    谢谢,我想问问的是,如果用sigaction的话,我就可以单独只屏蔽SIGPIPE了。用MSG_NOSIGNAL应该会屏蔽所有由send产生的信号是不是,这样会不会屏蔽了某些重要的信号?

论坛徽章:
0
9 [报告]
发表于 2011-06-08 11:52 |只看该作者
The local end has been shut down on a connection oriented socket. In this case the process will also receive a SIGPIPE unless MSG_NOSIGNAL is set.

论坛徽章:
0
10 [报告]
发表于 2011-06-08 11:54 |只看该作者
有个东西叫异步
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP