奇怪的send(),recv()问题。
我的任务是在实现邮件的收发,因为是一个全新的嵌入式平台系统,(富士通的专用
操作系统),所以只能在windows上通过标准的BSD Socket APIs实现,便于移植。
在邮件的发送中,需要不断的写固定格式的内容,如:
“From: test@192.168.1.1\r\n”,"Content-Type: text/plain\r\n"
等。我所有的向网络发送数据包的过程都封装在mail_stream_send()中。
但是当我连续调用它的时候,会导致失败,10054。
long mail_stream_send(SOCKET sk, char *pSrc, int len)
{
long nSend;
if ((nSend = send(sk,pSrc,len,0)) == SOCKET_ERROR)
{
printf("send() failed!\r\n");
return -1;
}
if (nSend < len)
{
printf("Data is too much!\r\n");
return -1;
}
//Sleep(10); //注意,这是问题所在。
return nSend;
}
当我在没有Sleep的时候,在连续调用了多次之后,(但总共的数据绝对不超过2k,
而且根据协议,每次发送的数据不超过500个字符,已用base64编码,pSrc中不含值为0的数据)随后的recv()函数获取服务器返回会出错,用WSAGetLastError()得到的错误代码为10054;奇怪的是我用F5开始Debug的时候能通过,正常,但一运行就不行。而且它从来没有提示过“Data is too much!”,然后我在这个函数中加上了Sleep(10)就一切正常了。但这样的代码不能用于产品的。请问到底是那里有问题了?