【问题标题】:boost::asio::async_connect creates not only one TCP connection but twoboost::asio::async_connect 不仅创建一个 TCP 连接,而且创建两个
【发布时间】:2014-02-26 08:36:59
【问题描述】:

我刚刚通过 TCPView 意识到使用 boost::asio 建立的一个 TCP 连接会创建两个连接。其中一个使用本地端口,第二个使用所需的远程端口。为什么?这种行为正常吗?有没有办法只创建一个?

这个问题最初是几年前发布的:

http://boost.2283326.n4.nabble.com/ASIO-tcp-socket-async-connect-connections-count-tc3901601.html#none

但没有人重播。

编辑:

我正在连接到端口 8001,这是我使用 netstat -nao 看到的:

TCP    127.0.0.1:10246        127.0.0.1:8001         ESTABLISHED     3252
TCP    127.0.0.1:10244        127.0.0.1:10245        ESTABLISHED     3252
TCP    127.0.0.1:10245        127.0.0.1:10244        ESTABLISHED     3252

谢谢!

【问题讨论】:

标签: c++ sockets boost-asio tcp-ip


【解决方案1】:

这是两个连接,而不是三个。检查端口号。显然,该库出于某种原因创建了与自身的连接。

想知道当您创建第二个连接时它是否会再次发生。

【讨论】:

  • 你对我的问题有答案吗?
  • 刚刚检查了两个连接,但似乎不是每个连接。仅当您创建第二个 io_service 并且建立连接时,它才会创建额外的连接。
  • 嗯,这就是你的答案。每个 io_service 在第一个连接上创建一个到自己的连接。 Java NIO 的 Selector 做了类似的事情,以克服平台限制。由于每个连接都不是一个或两个额外的连接,因此您真的没有问题。
  • 只是出于好奇,平台限制是什么?
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多