我正在编写一个充当服务器的win32控制台应用程序。我必须设置一个超时来接受功能,就像在10秒内没有连接端口关闭一样。正如我所知,这里有一些方法:
-
异步方式。但是我正在编写一个控制台应用程序,所以我不能使用wsasyncselect函数。
-
具有选择功能。但有消息说这种方式不安全。如果客户端发送了RST包,然后它脱机,那么select函数会认为这个套接字仍然可读,accept函数将永远保持在那里。
-
具有报警功能。首先,我尽量不使用它,因为它在这样的应用程序中是出乎意料的,其次,我担心它是否线程安全。
因此,我真诚地请求您找到一种让accept函数超时的方法,它必须是线程安全的,而且是一种更好的方法。
使套接字不阻塞(正如@JoachimPileborg所建议的)。
使套接字不阻塞的调用是带有FIONBIO参数的ioctlsocket。
这里有一个示例程序。