Chinaunix

标题: 对一个对方已经关闭的连接调用send,程序崩溃 [打印本页]

作者: yecheng_110    时间: 2007-10-31 15:56
标题: 对一个对方已经关闭的连接调用send,程序崩溃
对一个对方已经关闭的连接调用send,程序崩溃?
怎么知道对方已经关闭了
作者: cugb_cat    时间: 2007-10-31 15:57
检查返回值,以及处理SIG_PIPE信号。
作者: yecheng_110    时间: 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 编辑 ]
作者: converse    时间: 2007-10-31 16:13
汗,为啥要一次发送一个字节的数据?一次发送len长度不行吗?
作者: yecheng_110    时间: 2007-10-31 16:17
标题: 回复 #4 converse 的帖子
我也不明白
参照一个开源软件这么做的
作者: anthony1983    时间: 2007-10-31 16:45
SIG_PIPE默认处理是终止程序
屏蔽掉这个信号就可以了
作者: converse    时间: 2007-10-31 16:47
加入MSG_NOSIGNAL标志看看,是忽略SIG_PIPE信号的.
作者: yecheng_110    时间: 2007-10-31 16:53
标题: 回复#2 cugb_cat #6 anthony1983 #7 converse 的帖子
果真如此
多谢

[ 本帖最后由 yecheng_110 于 2007-10-31 16:55 编辑 ]
作者: lanying_wzw    时间: 2007-10-31 17:55
写一个读端已经关闭的管道会产生SIGPIPE信号
作者: findone    时间: 2007-11-01 13:30
标题: 回复 #4 converse 的帖子
好像在一些老的unix系统下必须一次发送一个字节
作者: findone    时间: 2007-11-01 13:31
标题: 回复 #4 converse 的帖子
好像在一些老的unix系统下必须一次发送一个字节




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2