该错误是网络资源暂时不可用,可能是发送的数据量太大或者接收方速度不够,我写了一个接收和
发送函数,请参考:
BOOL CCtrlSocket::Recv(void *pbuf, int nLen)
{
ASSERT(pbuf != NULL);
memset(pbuf,0,nLen);
char* p=(char*)pbuf;
int n=0,
count=0;
DWORD dwErr=0;
do{
n=recv(m_hSocket,p,nLen-count,0);
if(n==SOCKET_ERROR || n==0)
{
dwErr=::WSAGetLastError();
if(dwErr == 10035)
{
Sleep(10);
continue;
}
break;
}
count+=n;
p+=n;
}while(count<nLen);
return(count==nLen);
}BOOL CCtrlSocket::Send(void* pbuf, int nLen)
{
if(nLen == 0) return TRUE;
ASSERT(pbuf != NULL);
char* p=(char*)pbuf;
int n=0,
count=0;
DWORD dwErr=0;
do{
n=send(m_hSocket,p,nLen-count,0);
if(n==SOCKET_ERROR || n==0)
{
dwErr=::WSAGetLastError();
if(dwErr == 10035)
{
Sleep(10);
continue;
}
break;
}
count+=n;
p+=n;
}while(count<nLen);
return (count==nLen);
}

解决方案 »

  1.   

    10035意思是 '无法立即完成一个非阻挡性套接字操作。'因为我前面调用了
    WSAAsyncSelect()
    然后调用connect()连接
    成功后我在FD_CONNECT事件里发送一些数据.
    但一连接就发生10035错误,而且服务方可以看到已经连接
      

  2.   

    不需要的,返回这个错误后,你可以在OnConnect消息中接收到连接成功的消息。
      

  3.   

    建议UserId还是作为字符串来传
    发送、接受、比较,都比较容易