Winsock选择函数返回不同的值

时间:2014-01-20 06:32:38

标签: c++ winsock

我正在研究具有客户端服务器架构的项目。 select函数在不同场景中返回不同的值以下是详细信息

  • 场景1:

    当我在我的机器上安装服务器时,停止所有相应的服务,我的客户端进入DC状态,现在返回值select为1,read_mask.fd_count也为1.

  • 场景2:

    当我连接到远程服务器(abc.com)并断开我的无线连接时。在这种情况下,相同的函数返回0也read_mask.fd_count为0.我尝试将超时变量值从10毫秒更改为50秒。无法弄清楚问题。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

当您击落服务器时,会导致网络堆栈关闭连接。 Furtehr连接请求被拒绝。 select表示存在某些内容,recv()返回0表示forcibly closed

当您从插头中拔出无线电缆时,客户端既不会关闭也不会获得连接请求。等待任何超时检测不可用的服务器。

在实际应用程序中,您应该在协议中实现一种心跳,允许在第二种情况下检测“断开状态”。

编辑:如果您的Winsock实施支持SO_KEEPALIVE_VALS,您还可以将其配置为检测丢失的连接。另见:SO_KEEPALIVE