- 论坛徽章:
- 0
|
今天在写sock客户端时郁闷坏了,
连接代码如下:
void CFSock::Connect(.....)
{
//设置为非阻塞模式
IOCtl(FIONBIO, &cmd);
#if defined(_SOLARIS) || defined(_HPUNIX) || defined(_AIX)
rc = connect(m_hSocket, (SOCKADDR*)lpSockAddr, nSockAddrLen);
#else
rc = connect(m_hSocket, lpSockAddr, nSockAddrLen);
#endif
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(m_hSocket, &r);
timeout.tv_sec = 15;
timeout.tv_usec =0;
rc = select(0, 0, &r, 0, &timeout);
if(rc<=0)
{
rc = GetLastError();
TRACE("Last Error = %dn",rc);
return FALSE;
}
else
{
cmd = 0;
IOCtl(FIONBIO, &cmd);
m_bShut = FALSE;
m_pThread = new CFThread(do_SocketReadRun,this);
OnSend(GetLastError());
return TRUE;
}
}
main()
{
.......................
CFSock sock;
sock.Create();
sock.Connect("130.1.3.184",1239);
}
//=====================================================
上面只是个简单说明,很多代码已经略去, 上面的连接时用的非阻塞模式,可是在select时始终超时,连接不上,返回错误代码55,我检查了网络是通的, 而且改为阻塞模式连接是没有问题的。如果用非阻塞模式连接
本机(127.0.0.1)的23端口,仍然是超时, 错误返回代码为0。 说明一下,客户端为AIX 5L。给位大爷帮忙解决一下吧,先谢了。
[ 本帖最后由 liyuhui 于 2005-11-9 15:46 编辑 ] |
|