访问Boost Asio套接字的基础数据

问题描述 投票:1回答:1

我正在尝试访问套接字的基础数据,例如远程端点,它是地址和端口号。以下是从连接的套接字复制远程端点的代码的一部分。是否可以获取对远程端点(实际数据)的引用/ const引用? (因此不涉及复制)。

auto remoteEp = peerSocket.remote_endpoint();
auto IPaddress = remoteEp.address();
auto portNumber = remoteEp.port();

仅在套接字连接到远程客户端时尝试此操作。

boost network-programming boost-asio serversocket asyncsocket
1个回答
0
投票

这是不可能的。前提是这些对象在内部具有该数据的副本。他们可能会或可能不会(实际上却不是)。

相反,这些功能使用Linux上getpeername中的sys/socket.h功能。

在Windows或cygwin上,Asio会通过检查连接时间是否仍与上次检索时间相同来实际缓存远程端点。这仍然意味着您无法获得参考。

[如果您使用的是Windows IOCP套接字,则native_handle_type将可选地包含远程端点的副本,可以使用.have_remote_endpoint()进行检查并使用.remote_endpoint()进行检索(仍然按值)。

摘要

在并发方案中引用是不安全的。在使用异步操作的世界中,对象生存期并不可靠。

我认为您的问题可能是由于需要优化而引起的。在那种情况下,到目前为止,最简单的选择是将值自己简单地缓存在控制对象生存期的位置。

© www.soinside.com 2019 - 2024. All rights reserved.