0

我有一个窗口服务器套接字和一个 Linux 客户端套接字。客户端连接到服务器并发送消息。之后,服务器将调用外部可执行文件。问题是:当服务器不可用时,客户端在连接功能时因超时而阻塞,但我不想要它。我希望如果没有建立连接,客户端套接字将立即关闭。

有人可以给我一些建议吗?

4

1 回答 1

1

警告:前面有伪代码。

你可以这样做。但这并不像您希望的那样直截了当。您需要async_connect()从您的客户那里使用才能不阻止。然后,您还需要deadline_timer设置您认为合适的任何超时。零是行不通的,你需要给async_connect()一些时间。但我想一两秒应该没问题。

然后计时器处理程序将必须对cancel()套接字进行所有异步操作(您需要确保这只是连接,如果需要,请使用更多套接字)。

请注意,套接字不会因此而关闭。async_connect理想情况下,只要传递的 error_code 指示否定结果,您将在处理程序中关闭它。例如,如果它被取消,将使用 OPERATION_ABORTED 作为 error_code 调用处理程序。

当然,如果你只检查那个,你也可以close()cancel(). async_connect但是,每当由于其他原因失败时,这会给您留下一个打开的套接字。

我会从您的问题中假设您希望您的套接字在async_connect()传递任何错误代码但成功时关闭。SUCCESS 是唯一一个在用作布尔值时隐式转换为 0 的 error_code,因此在处理程序中检查它很容易。^^

不要忘记deadline_timer在 的处理程序中取消,async_connect()并确保在关闭套接字之前没有使用 OPERATION_ABORTED 调用计时器处理程序。^^

于 2013-11-15T07:39:25.397 回答