如何设置winsock接受函数超时?

时间:2012-02-23 08:36:07

标签: timeout winsock

我正在编写一个充当服务器的win32控制台应用程序。我必须设置一个超时接受功能,就像没有连接在10s端口关闭。据我所知,这里有一些方法:

  1. 异步方式。但是我正在编写一个控制台应用程序,因此我无法使用该wsaasyncselect函数。

  2. 使用选择功能。但有消息说这种方式并不安全。如果客户端发送了一个RST包然后它离线,那么select函数会认为这个套接字仍然可读,而accept函数将永远保存在那里。

  3. 具有闹钟功能。首先,我尝试不使用它,因为在这样的应用程序中它是意外的,其次我担心它是否是线程安全的。

  4. 所以在这里,我真诚地要求你找到一种方法让接受函数超时,谁必须是线程安全的,并且更好的方式。

1 个答案:

答案 0 :(得分:0)

使套接字无阻塞(如@JoachimPileborg建议的那样)。

使用FIONBIO参数调用使套接字无阻塞是ioctlsocket

有一个示例程序here