send时候出现Resource temporarily unavailable求救!!急!!

my3g520 2011-11-04 04:20:49
我的发送和接收都会有 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错误 这条会数据会写入在文件很多次 急速循环了很多次发送都没发出去最后或者发出去了或者没出去(发出去的可能性大些)

大家能不能帮忙看看 怎么解决这个问题, 最好能怎么不让那条格式错误的数据发送出去 还有不漏发数据 小弟菜鸟 请各位大师们赐教 能解决问题感激不尽 再解决不了公司要开除我了 哭~~~~~~
...全文
6629 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
树先生 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qq120848369 的回复:]

返回值不等于请求值不代表一点没发出去,请检查返回值。
[/Quote]
+1
qq120848369 2011-11-04
  • 打赏
  • 举报
回复
返回值不等于请求值不代表一点没发出去,请检查返回值。
yifanernei 2011-11-04
  • 打赏
  • 举报
回复

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

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧