日期:2014-05-16  浏览次数:21257 次

send时候出现Resource temporarily unavailable求救!!急!!
我的发送和接收都会有 Resource temporarily unavailable的错误 接收比较好办,不管他继续接收 但是发送采取这样的办法 还是有漏发的 ,我的发送代码

while(1)
  {
  snd_len = send(socket, data, data_len, 0);
  if(snd_len != data_len)
  {
  if(errno == EAGAIN || errno == EINTR)
  {
  FILE *fp = fopen("errorfile.txt", "a+");  
  if (fp == NULL) 
  {  
  perror("Open file sendfile");  
  }
  fputs(strerror(errno),fp);
  fputs("\n(", fp);
  fwrite(data, strlen(data), 1, fp);
  fputs(")\n", fp);
  fclose(fp);
   
  snd_len = send(socket, data, data_len, 0);
  continue;

  }
  printf("send error! socket=%d snd_len=%d data_len=%d errno=%s\r\n", socket, snd_len, data_len, strerror(errno));
  return 0;
  }
  else
  {
  break;
  }
  }

我的发送是用一个循环连续的的发 这肯定速度很快 发的少没事 发多了 比如1000条以上就会出现Resource temporarily unavailable

结果就会有漏发(漏发情况较少了 因为我重发了,但是还是有漏发)或者格式不对(这个是绝对的) 比如:正确的格式 {token=0,b,c,d} token是发送的编号 第一条为0 第二条为1 .... 以此类推
结果服务器端接收的可能是{token=0,b,c,{token=0,b

大家可以看到我有把出错的信息和 出错的数据写入文件,写入文件的数据 正是漏发出错的数据 所以我就重发但是 好像之前的那条格式错误的数据已经发出去了 ,还有 比如 {token=800,b,c,d} 这条出现了Resource temporarily unavailable错误 这条会数据会写入在文件很多次 急速循环了很多次发送都没发出去最后或者发出去了或者没出去(发出去的可能性大些)
 
大家能不能帮忙看看 怎么解决这个问题, 最好能怎么不让那条格式错误的数据发送出去 还有不漏发数据 小弟菜鸟 请各位大师们赐教 能解决问题感激不尽 再解决不了公司要开除我了 哭~~~~~~

------解决方案--------------------
C/C++ code

nSend = 0;
while (nSend < data_len)
{
    iSend = send(s, data + nSend, data_len - nSend, 0);
    if (iSend <= 0)
     //error operator
    else
      nSend += iSend;
}

------解决方案--------------------
返回值不等于请求值不代表一点没发出去,请检查返回值。
------解决方案--------------------
探讨

返回值不等于请求值不代表一点没发出去,请检查返回值。