有没有办法允许在 ASIO 中使用已经连接的套接字?
尝试发送一个请求; ip::tcp::socket::assign
在 2 个不同的地方随机给出 2 个不同的段错误。一个是在调用回调之前(在 op_queue_acess::next
上),另一个是在回调之后(在 boost::asio::detail::task_io_service_operation::complete
上(func_等于 0 并尝试执行))。所以我猜它不适用于已连接的套接字。
编辑:
情况是,我有一个已连接的 native 描述符(实际上是另一个库下的一个套接字),我想将它分配给一个新的空 ip::tcp::socket 以便在套接字连接时通知我read
就绪(使用带空缓冲区的 socket::async_read_some
)并以非阻塞方式使用该库。
示例代码如下:
class C
{
ip::tcp::socket socket_;
const char connection_info_[] = "...";
TPLibrary tp_;
void start()
{
.
.
tp_.connect(connection_info);
socket_.assign(ip::tcp::v4(), tp_.nativeSocket());
}
}
然后在此套接字上使用 async_read 会出现上述段错误,有时是在调用回调之后,有时是之前。
编辑: 现在我已经删除了所有内容,只有 tcp::socket 和分配给左侧的套接字但仍然 boost 会产生段错误。是因为 io_service 在一个动态加载的库上,而 socket 在另一个动态加载的库中,引用了主库上的 io_service 吗?
最佳答案
您可以将已连接的套接字分配给 boost::asio 套接字,然后享受 boost 功能。
从下面的链接中,您可以找到如何使用分配 API。
如果您有任何疑问,请告诉我。
编辑:
现在,如果您的问题是关于非阻塞读取的,因为 async_read_some 是非阻塞的,那么按如下方式使用 read_some
boost::asio::async_read(*p_socket, boost::asio::buffer(&buffer[index], remaining_len2read), read_handler);
上述 API 是阻塞的,直到接收到所有数据后才会返回。
关于c++ - 如何在 Boost.ASIO 中分配一个已经连接的本地套接字类型(TCP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553206/