如何在 Boost.ASIO 中分配已连接的本机套接字类型 (TCP)
How to assign an already connected native socket type (TCP) in Boost.ASIO
有没有办法允许在ASIO中使用已经连接的套接字?
尝试发送一个请求; ip::tcp::socket::assign
在 2 个不同的地方随机给出 2 个不同的段错误。一个是在调用回调之前(在op_queue_acess::next
上),另一个是在回调之后(在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会给出所述 seg 错误,有时是在回调之后,有时是在调用之前。
编辑:现在我已经删除了所有内容,只有 tcp::socket 并分配给左侧的套接字,但仍然 boost 会产生段错误。是因为io_service位于动态加载的库上,而套接字位于另一个动态加载的库中,并引用主库上的io_service?
您可以将已经连接的套接字分配给 boost::asio 套接字,然后享受升压功能。
从下面的链接中,您可以找到如何使用分配API。
http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/basic_stream_socket/assign/overload1.html
如果您有任何疑问,请告诉我。
编辑:
现在,如果您的问题是关于非阻塞读取async_read_some是非阻塞的,请使用如下read_some
boost::asio::async_read(*p_socket, boost::asio::buffer(&buffer[index], remaining_len2read), read_handler);
上述 API 正在阻塞,在收到所有数据之前不会返回。
问题是关于我正在使用的动态链接。作为问题的答案tcp::socket::assign
在连接的插座上工作正常。
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 如何<double>通过TCP套接字将CLI 列表^发送到本机C++?
- 如何在 Boost.ASIO 中分配已连接的本机套接字类型 (TCP)
- Android 本机可执行文件如何接受外部套接字连接
- 通过套接字将对象(XML输出或任何c++对象类型)从服务器传递到客户机,反之亦然
- 从websocketpp中的connection或connection_ptr获取本机套接字描述符
- 如何在多线程客户机的多个线程上访问同一个套接字
- 在不关闭本机处理程序的情况下销毁Boost Asio套接字
- 实用c++套接字或虚拟机