send和recv默认的超时时间是多长啊?还有,怎么判断使用recv接收数据时有没有全部接收完呢?
使用:
while(recv(....) > 0) {
....
}
总是会多接收一次,就会使程序阻塞好长一段时间,而用setsockopt设置接收的超时时间,又怕由于设置超时时间过短导致数据接收不到,有什么好的办法来解决这个问题吗?
解决就给分!不够再加!

解决方案 »

  1.   

    getsockopt(...,SOL_SOCKET,SO_RCVTIMEO,...);//recv超时时间
    getsockopt(...,SOL_SOCKET,SO_SNDTIMEO,...);//send超时时间timeval tm = { 0, 0 };
    使用select( ..., &tm); 进行判断,select将马上返回,然后检查是否还有数据没有收到...
      

  2.   

    能具体的说明一下select或WSAAsyncSelect吗?比如举个例子
      

  3.   

    sans(sans) 
    timeval tm = { 0, 0 };
    使用select( ..., &tm); 进行判断,select将马上返回,然后检查是否还有数据没有收到...怎么检查是否还有数据啊,有没有代码参考啊?
      

  4.   

    while(1){
    ret=recv(m_Socket,rec_buf,LENECHODATA,0);
    if(ret!=LENECHODATA){
    // on windowx we use 
    int RetValue=0;
    RetValue=WSAGetLastError();
    TRACE("recv error:%d\n",RetValue);
    if(RetValue==WSAEWOULDBLOCK){
    continue;
    }else{
    this->CloseSocket();
    return NULL;
    }
    }else{
    break;
    }
    }
    接收到就返回