【发布时间】:2016-10-11 18:27:13
【问题描述】:
我有一个应用程序,它每秒通过本地网络发送一次多播消息。此代码在 Windows 和 macOS 上都可以正常工作,并且在 iOS 上也可以正常工作,除非网络未连接到互联网。
boost::asio::ip::tcp::resolver resolver(m_IOservice);
boost::system::error_code ec;
boost::asio::ip::tcp::resolver::query query(boost::asio::ip::host_name(),"");
boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(query, ec);
boost::asio::ip::address interface_ip_address;
while(it!=boost::asio::ip::tcp::resolver::iterator())
{
interface_ip_address = (it++)->endpoint().address();
if(interface_ip_address.is_v4())
{
// Message sending code here
}
}
问题发生在 resolver.resolve() 中,我得到一个异常,错误是“找不到主机(权威)”。
我不确定我是否真的理解为什么会发生这个错误,当然也不知道如何修复它。谁能帮我解释一下?
【问题讨论】:
-
嘿,你在哪里可以让 boost asio 库在 iOS 设备上运行?它们是否会导致运行循环出现任何问题。
-
是的,我们让它工作了,我们没有遇到任何问题。 boost 以太网代码在单独的线程中运行,然后将数据(以线程安全的方式)传递给主运行循环线程进行处理
-
谢谢。为了清楚起见,您没有在 io_services 事件循环中调整任何内容? asio 获取数据,您只需将其传递给不同的线程。
-
是的,就是这样。没有调整 io_services 事件循环。 Boost asio代码其实很简单,也很可靠。
标签: c++ ios boost boost-asio