我刚开始接触socket编程,看了点资料,写了个程序发现有些问题,有些地方自己还是不很清楚。希望知道的大侠帮帮忙。
//----------
1.客户端的请求连接问题
如果我直接用connect函数如下:
int status;
status = connect(m_clientSocket,(struct sockaddr*)&clientAddr,sizeof (clientAddr));
if (status==SOCKET_ERROR)
{
          //处理
          }
如果此时服务器没开,我发现cpu使用率很高,应该是程序阻塞在connect,可以用多线程解决这个问题,但如果我不准备用多线程,我看了一些资料,说是可以用WSAAsyncSelect(m_clientSocket,m_hWnd,WM_SOCK_CLIENT,FD_CONNECT|FD_CLOSE);设置为非阻塞模式,
//---
在这我的问题就出来了,
此时客户端检测服务器是否连接它是靠什么???是靠WM_SOCK_CLIENT消息中的FD_CONNECT,那么此时connect函数的 的返回值有意义吗???它代表的是什么意思???      
也就是说,在这种方法下,怎样知道是否连接成功???????//-------总结----
也就说利用WSAAsyncSelect后,connect请求连接,connect函数的返回值能做为连接成功的标志吗???
WM_SOCK_CLIENT(WSAAsyncSelect中我定义的一个消息)中的FD_CONNECT说明了什么,它能作为连接成功(被连接)的标志吗????附:我如果不用WSAAsyncSelect,直接connect函数,函数的返回值不是SOCKET_ERROR,如果我用了WSAAsyncSelect,我发现我的connect函数返回值为SOCKET_ERROR,但WM_SOCK_CLIENT(我定义的消息)函数响应了,其中lParam为FD_CONNECT,这说明了什么????  我想如果前面的问题那位大侠给我解释一下,那也就清楚了

解决方案 »

  1.   

    使用WSAAsyncSelect,就算当时连接成功了,也会触发FD_CONNECT事件,
    如果发生错误,SOCKET_ERROR就要用WSAGetlasterror()来看是什么错误,
    如果是阻塞的错误,那么根据FD_CONNECT的事件来看是否连接成功
    其他的错误,就表示connect调用出现的错误,具体要根据wsagetlasterror()返回值来确定
      

  2.   

    能具体讲讲使用WSAAsyncSelect后,connect的返回值是怎么回事???FD_CONNECT事件时间的触发又是怎么回事???
      

  3.   

    http://dev.csdn.net/develop/article/39/39132.shtm