非阻塞socket 怎么判断其已建立连接

非阻塞socket 如何判断其已建立连接?
大家好,小弟最近在做一个仪器控制的小项目,碰到一个问题,对于非阻塞的socket,不知道如何判断其已建立连接,比如,现在已经建立连接,但并不知道,如何检查其已建立连接呢?谢谢大家的指导!

------解决方案--------------------
发个消息过去请求回应
没人理你就是没连上
要是对方按协议恢复了就是连上了
不过
连接没有什么阻塞不阻塞的说法吧
------解决方案--------------------
BOOL InitSockt(void)
{
int reVal; //返回值
WSADATA wsData; //WSADATA变量
reVal = WSAStartup(MAKEWORD(2,2),&wsData);//初始化Windows Sockets Dll

//创建套接字
sClient = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == sClient)
return FALSE;


//设置套接字非阻塞模式
unsigned long ul = 1;
reVal = ioctlsocket(sClient, FIONBIO, (unsigned long*)&ul);
if (reVal == SOCKET_ERROR)
return FALSE;

return TRUE;
}

/**
 * 连接服务器
 */
BOOL ConnectServer(void)
{
int reVal; //返回值
sockaddr_in serAddr;//服务器地址

serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(SERVERPORT);
serAddr.sin_addr.S_un.S_addr = inet_addr(SERVERIP);

for (;;)
{
//连接服务器
reVal = connect(sClient, (struct sockaddr*)&serAddr, sizeof(serAddr));

//处理连接错误
if(SOCKET_ERROR == reVal)
{
int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode ||//连接还没有完成
WSAEINVAL == nErrCode)
{
continue;
}else if (WSAEISCONN == nErrCode)//连接已经完成
{
break;
}else//其它原因,连接失败
{
continue;
}
}

if ( reVal == 0 )//连接成功
break;
}

bConnecting = TRUE;

return TRUE;
}

以上是摘自精通Windows Sockets网络开发:基于Visual C++实现 的代码,你自己体会吧LZ,里面有判断的.必要时自己下载这PDF来看吧.