免费注册 查看新帖 |

Chinaunix

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

对一个对方已经关闭的连接调用send,程序崩溃 [复制链接]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-31 15:56 |只看该作者 |倒序浏览
对一个对方已经关闭的连接调用send,程序崩溃?
怎么知道对方已经关闭了

论坛徽章:
0
2 [报告]
发表于 2007-10-31 15:57 |只看该作者
检查返回值,以及处理SIG_PIPE信号。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
3 [报告]
发表于 2007-10-31 16:06 |只看该作者

  1. int senddata(int fd,char* data,int len)
  2. {   
  3.     char *p;
  4.     ssize_t res;
  5.     size_t i;
  6.    
  7.     p = data;
  8.     for(i = 0;i < len;)
  9.     {
  10.         if((res = send(fd,p,1,0)) < 0)
  11.         {
  12.             if(errno== EINTR)
  13.                 continue;
  14.             else
  15.                 return -1;
  16.         }
  17.         if(res == 0)
  18.         {
  19.             break;  
  20.         }
  21.         p++;
  22.         i++;
  23.     }
  24.     return i;
  25. }

复制代码

和SIG_PIPE也有关系?

[ 本帖最后由 yecheng_110 于 2007-10-31 16:07 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-10-31 16:13 |只看该作者
汗,为啥要一次发送一个字节的数据?一次发送len长度不行吗?

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
5 [报告]
发表于 2007-10-31 16:17 |只看该作者

回复 #4 converse 的帖子

我也不明白
参照一个开源软件这么做的

论坛徽章:
0
6 [报告]
发表于 2007-10-31 16:45 |只看该作者
SIG_PIPE默认处理是终止程序
屏蔽掉这个信号就可以了

论坛徽章:
0
7 [报告]
发表于 2007-10-31 16:47 |只看该作者
加入MSG_NOSIGNAL标志看看,是忽略SIG_PIPE信号的.

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
8 [报告]
发表于 2007-10-31 16:53 |只看该作者

回复#2 cugb_cat #6 anthony1983 #7 converse 的帖子

果真如此
多谢

[ 本帖最后由 yecheng_110 于 2007-10-31 16:55 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-10-31 17:55 |只看该作者
写一个读端已经关闭的管道会产生SIGPIPE信号

论坛徽章:
0
10 [报告]
发表于 2007-11-01 13:30 |只看该作者

回复 #4 converse 的帖子

好像在一些老的unix系统下必须一次发送一个字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP