小弟初学网络编程,以下代码为程序中的一段,其中length为接收数据包的长度,肯定大于1024,m_socket为CSocket派生类的变量char *buf=new char[length]
do
{
int temp=m_socket.Receive(buf,1024);
length-=temp;
}
while(length>0)程序在慢网下执行时有时会失去响应,应该是出在receive函数上,我试过ioctl函数设置m_socket为非阻塞,但无效,请问改如何解决?
ps:请不要提供多线程编程的解决方法
do
{
int temp=m_socket.Receive(buf,1024);
length-=temp;
}
while(length>0)程序在慢网下执行时有时会失去响应,应该是出在receive函数上,我试过ioctl函数设置m_socket为非阻塞,但无效,请问改如何解决?
ps:请不要提供多线程编程的解决方法
是TCP socket?
是TCP socket
thx!
FD_SET fd = {1, m_hSocket};
TIMEVAL tv = {nSecs, 0};
int ret=select(0, NULL, &fd, NULL, &tv);
//int ret=select(0, &fd, NULL, NULL, ptv);接收数据 if(ret == 0||ret==SOCKET_ERROR)
{
if(ret==0)
TRACE("超时\n");
else TRACE("错误,%d\n",GetLastError());
return ret;
}但是:即使没超时有数据,但是不能保证数据有多少,所以还是有可能引起阻死。
用异步套接口也有其麻烦的地方,看看现成的例子吧。