有没有一种方法可以在ASIO中使用已经连接的套接字?
尝试发送一个请求时,ip::tcp::socket::assign会在两个不同的位置随机出现2个不同的段错误。其中一个是在调用回调之前(在op_queue_acess::next上),另一个是在回调之后(在boost::asio::detail::task_io_service_operation::complete上(func_等于0并试图被执行))。所以我猜它不能与已连接的套接字一起使用。
编辑:
情况是,我有一个已连接的本地描述符(实际上是另一个库下面的套接字),我想将其分配给一个新的、空的ip::tcp::socket,这样当套接字准备好读取(使用带有空缓冲区的socket::async_read_some)时,我就能收到通知,并以非阻塞方式使用该库。
示例代码如下:
尝试发送一个请求时,ip::tcp::socket::assign会在两个不同的位置随机出现2个不同的段错误。其中一个是在调用回调之前(在op_queue_acess::next上),另一个是在回调之后(在boost::asio::detail::task_io_service_operation::complete上(func_等于0并试图被执行))。所以我猜它不能与已连接的套接字一起使用。
编辑:
情况是,我有一个已连接的本地描述符(实际上是另一个库下面的套接字),我想将其分配给一个新的、空的ip::tcp::socket,这样当套接字准备好读取(使用带有空缓冲区的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::ip::tcp::socket
分配给一个已存在的本地描述符吗? - Sam Miller