当前位置: 首页 > 知识库问答 >
问题:

关闭具有挂起连接的Boost::ASIO::IP::TCP::Socket

能烨华
2023-03-14

根据boost asio文档,如果我对一个异步连接操作挂起的套接字调用close,处理程序将被“立即”调用,并带有错误代码。从文档中可以看到:

此函数用于关闭套接字。任何异步发送、接收或连接操作都将立即取消,并以boost::asio::error::operation_aborted错误完成。

但实际上并不是立即/同步调用处理程序,而是在控制返回到io_service时异步调用它。如果连接实际成功并且我的处理程序回调已经发布到io_service,那么在调用close之后,我的连接处理程序是否仍然被调用而没有错误代码?

共有1个答案

席烨
2023-03-14

文档说明未完成的操作将立即取消,而不是立即调用

连接操作可能已经完成,并且处理程序在io_service中排队等待延迟调用,其error_code作为boost::system::errc::success。可能值得考虑检查完成处理程序中的套接字是否为_open(),如本答案中所做的那样。有关此行为的更多详细信息,请参阅以下答案。

 类似资料:
  • 提前致谢

  • 根据http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/overview/cpp2011/futures.html,我们可以将boost::asio与一起使用。但是我找不到任何有关使用的信息,它具有更多的功能,例如。我怎么用?

  • 我试图使用Akka和Scala编写一个TCP服务器,它将实例化参与者,并在客户端分别连接和断开连接时停止参与者。我有一个TCP绑定执行器, 上面实例化上的TCP侦听器,并将处理程序参与者注册到每个连接。 我没有在附近配置的非Windows机器上进行测试,因为我认为这与我在Windows上运行有关,因为在搜索之后,我发现了一个仍然打开的bug--https://github.com/akka/akk

  • 我已经配置了HAProxy(1.5.4,但我也尝试了1.5.14),以便在TCP模式下平衡5672端口上公开AMQP协议(WSO2 Message Broker)的两台服务器。客户端通过Haproxy创建并使用到AMQP服务器的永久连接。 我更改了客户端和服务器TCP keepalive超时,设置net.ipv4.tcp_keepAlive_time=120(CentOS 7)。 在HAProxy

  • 我正在尝试用Boost::ASIO实现NAT打孔。根据我的理解,NAT穿孔器的工作原理是这样的(UDP/TCP): 客户端A绑定到端口并连接到服务器S,客户端B执行相同操作。 当S同时接收到请求和匹配时,它将A的ip和端口发送给B,B发送给A。 a和B接收对方的ip和端口,现在它们从同一端口向对方发送消息并形成连接(因为它们正在等待回复?) 如果没有成功的或,我似乎无法运行任何。当然,当目标端口没