我正在使用 boost 库来创建一个服务器应用程序。一次只允许一个客户端,因此如果调用 async_accept(...) 函数,则接受器将被关闭。
我的服务器的唯一工作是定期向客户端发送数据(如果在服务器上启用了发送,否则“就坐在那里”直到它被启用)。因此,我有一个提升消息队列 - 如果消息到达,则在套接字上调用 send()。
我的问题是我无法判断客户是否还在听。通常你不会在意,到下一次传输时,发送会产生错误。
但在我的情况下,当打开套接字时接受器没有打开。如果套接字进入 CLOSE_WAIT 状态,我必须关闭它并再次打开接受器,以便客户端可以再次连接。
等到下一次发送也是没有选择的,因为发送可能被禁用,因此我的服务器会被卡住。
问题:如何确定 boost::asio::ip::tcp::socket 是否处于 CLOSE_WAIT 状态?