我有一个窗口服务器套接字和一个Linux客户端套接字。客户端连接到服务器并发送消息。之后,服务器将调用外部可执行文件。问题是:当服务器不可用时,客户端在连接功能时阻塞超时,但我不想要它。我希望如果没有建立连接,客户端套接字将立即关闭。
有人可以给我一些建议吗?
答案 0 :(得分:1)
警告:伪代码提前。
你可以做到这一点。但它并不像你希望的那样直截了当。
您需要使用客户端的async_connect()
来阻止。然后,您还需要deadline_timer
设置为您认为合适的超时。零不起作用,你需要给async_connect()
一些时间。但我想一两秒钟就可以了。
然后,定时器处理程序必须cancel()
对套接字执行所有异步操作(您需要确保只是连接,如果需要,请使用更多套接字)。
请注意套接字不会被关闭。理想情况下,只要传递的error_code指示否定结果,您将在async_connect
的处理程序中将其关闭。例如,如果它被取消,则将使用OPERATION_ABORTED作为error_code调用处理程序。
当然,如果你只检查它,你也可以在close()
后的定时器处理程序中cancel()
套接字。但是,只要async_connect
由于其他原因失败,那就会给你一个开放的套接字。
我会从您的问题中假设,只要async_connect()
传递任何error_code但SUCCESS,您希望套接字关闭。并且当用作布尔值时,SUCCESS是唯一隐式转换为0的error_code,因此在处理程序中检查它很容易。 ^^
不要忘记取消deadline_timer
处理程序中的async_connect()
并确保在关闭套接字之前未使用OPERATION_ABORTED调用计时器处理程序。 ^^