网络编程关于select的有关问题,大侠们帮帮忙

网络编程关于select的问题,大侠们帮帮忙!
程序大致结构:
TCP连接,一个服务端,一个客户端。以下是客户端接收数据的伪代码:
while(1)
{
BOOL timeout = TRUE;
if (selcet(.............)) //如果有数据接收
{
  recv(..........)
}
}

正常运行没什么问题,问题是,如果关闭服务端程序,或者禁用网络,那么select不会阻塞,每次都返回1;recv则每次返回-1,接收失败;

请大家指点指点!

------解决方案--------------------
是否有数据读不是这样判断的
C/C++ code

i = select(s + 1, &fds, NULL, NULL, &nextEvent);
    if (i > 0 && FD_ISSET(s, &fds))

------解决方案--------------------
select模型中,当
■ 有数据可以读入。
■ 连接已经关闭、重设或中止。
都符合可读性条件
------解决方案--------------------
recv -1返回值意思就是说明连接异常断开
------解决方案--------------------
获取错误代码,判断是不是peer关闭连接。
------解决方案--------------------
试试recv前检查一下socket是否有效。
------解决方案--------------------
很正确啊
你关闭服务器端
那么SOCKET被关闭
SELECT当然返回SOCKET就绪,1表示1个SOCKET就绪
只不过实际是连接中断
你调用RECV,返回-1就是SOCKET——ERROR
这个时候用WSAGetlastError函数判断具体错误,就可以发现是连接关闭

每个函数都要检查返回值
如果SELECT返回0,也要处理,这一般表示SOCKET没有设置或者你的网络挂了