我在编程时,使用CAsyncSocket;
客户端程序是这样的:CAsyncSocket m_socket;
.......
m_socket.Create();
...
err=m_socket.Connect("10.18.12.111", 9724);在这里err为0,使用
   Error=GetLastError();
发现Error=WSAEWOULDBLOCK(10035) 难道是建立连接失败?于是我抓包,抓包的结果显示TCP三次握手成功了。
我想握手成功,那么就可以直接调用 OnSend( int nErrorCode )发送消息
这时候返回WSAENOTSOCK (10038)错误。 小弟我实在查找不到错误的原因了!只好求助各位大侠!指点一下迷津!
小弟在此先行谢过了!

解决方案 »

  1.   

    WSAEWOULDBLOCK   是非常常见的错误,意味着请求的操作在调用期间没有足够的时间来完成   
        
     send返回WSAEWOULDBLOCK错误以后,要再用另一条FD_WRITE通知应用程序可以再次send数据就OK
      

  2.   

    f this indicates an error code of WSAEWOULDBLOCK,and your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete.
    加上OnConnect响应事件,因为你用的是CAsyncSocket(异步),所以m_socket.Connect("10.18.12.111", 9724); 并不是等连接成功才返回,而是马上返回了,这时,你加上OnConnect事件,当Connect真的成功以后,就会发消息给OnConnect,此时就说明连接成功了。然后才可以进行send操作。
      

  3.   

    CAsyncSocket m_socket  是异步的套接字,
    所以一旦尝试了 连接,
    它就直接返回了 WSAEWOULDBLOCK,
    你应该是onconnect 中等待。 
    一旦有结果返回,系统会自动回调onconnect函数的。
      

  4.   

    非阻塞的socket马上返回
    这时候还没有连接成功,WSAEWOULDBLOCK就是在等待连接
    可以用onconnect等待
    不过我建议连接还是用阻塞的CSOCKET,然后你可以设个超时
    int   timeout;
    ///timeout赋值
    setsockopt(bFlag,   SOL_SOCKET,   SO_RCVTIMEO,   (char   *)&timeout,   sizeof(timeout));