有没有办法允许在 ASIO 中使用已经连接的套接字?
尝试发送一个请求;ip::tcp::socket::assign
在 2 个不同的地方随机给出 2 个不同的段错误。一种是在调用回调之前(on op_queue_acess::next
),另一种是在回调之后(on boost::asio::detail::task_io_service_operation::complete
(func_等于0并尝试执行))。所以我猜它不适用于连接的套接字。
编辑:
情况是,我有一个连接的本机描述符(实际上是另一个库下的套接字),我想将它分配给一个新的空 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 位于动态加载的库中,而套接字位于另一个动态加载的库中,并且引用了主库上的 io_service 吗?