小弟初学网络编程,以下代码为程序中的一段,其中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:请不要提供多线程编程的解决方法

解决方案 »

  1.   

    是在OnReceive中加的以上代码的吗
    是TCP socket?
      

  2.   

    不是在OnReceive中,是视类的一个函数,在OnReceive中调用
    是TCP socket
      

  3.   

    试一试在这个函数中去掉你的循环,在下一次的OnReceive中继续接收你得数据包
      

  4.   

    derive m_socket from CAsyncSocket,not CSocket.or you can set receiving time-out.
      

  5.   

    how to set receive time-out?
    thx!
      

  6.   

    发送数据前:
             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;
    }但是:即使没超时有数据,但是不能保证数据有多少,所以还是有可能引起阻死。
    用异步套接口也有其麻烦的地方,看看现成的例子吧。