请教:同一台机子和在不同的机子上时,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;
...全文
103 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjfzb 2008-11-05
  • 打赏
  • 举报
回复
我把它换成阻塞模式后,WSAGetLastError()的返回值是10060(WSAETIMEDOUT),这是什么原因

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧