请教:同一台机子和在不同的机子上时,FD_ISSET返回的值怎么不一样,
fjfzb 2008-11-05 02:38:44 我把两个服务器放在同一台机子上测试,用SELECT来监视可写的SOCKET,FD_ISSET返回的是真,当把两个服务分别放在不同的机子,FD_ISSET返回的是假,这是什么原因。
相关代码:
m_sock = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
if ( m_sock == INVALID_SOCKET )
{
return FALSE;
}
DWORD nonblock = 1;
if( ioctlsocket( m_sock, FIONBIO, &nonblock) == SOCKET_ERROR )
{
m_sock = INVALID_SOCKET;
return FALSE;
}
int nZero = SIXTYFOUR_K;
if( setsockopt( m_sock, SOL_SOCKET,SO_RCVBUF, (char *) &nZero, sizeof(nZero)) == SOCKET_ERROR )
{
m_sock = INVALID_SOCKET;
return FALSE;
}
nZero = SIXTYFOUR_K;
if( setsockopt( m_sock, SOL_SOCKET,SO_SNDBUF, (char *) &nZero, sizeof(nZero)) == SOCKET_ERROR )
{
m_sock = INVALID_SOCKET;
return FALSE;
}
if(connect( m_sock, (SOCKADDR *) &addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR )
{
if( WSAGetLastError() != WSAEWOULDBLOCK )
{
m_sock = INVALID_SOCKET;
return FALSE;
}
fd_set fds;
FD_ZERO(&fds);
FD_SET( m_sock, &fds);
struct timeval t;
t.tv_sec = 0;
t.tv_usec = 0;
select( 0, NULL, &fds, NULL, &t);
if(!FD_ISSET( m_sock, &fds))
{
m_sock = INVALID_SOCKET;
return FALSE;
}
}
Initialize(m_sock);
m_bConnect = TRUE;