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;
}
------解决方案--------------------
返回值不等于请求值不代表一点没发出去,请检查返回值。
------解决方案--------------------