Я пытаюсь подключить dvr, используя boost asio library в ios. Приложение отлично работает в эмуляторе в сети ipv4. Но когда я отправляю приложение на Appstore, Apple отвергает приложение, так как оно не работает в сети ipv6. И я вижу на сайте Apple, что приложение должно поддерживать сеть ipv6. https://developer.apple.com/news/?id=05042016aIOS boost asio connect from ipv6 network
Поэтому я думаю, что проблема возникает в разделе, где я пытаюсь подключиться к DVR с использованием библиотеки boost, где ip-адрес DVR вытащил из DB (жестко закодированный), а ниже - соответствующая часть код.
boost::asio::io_service io_service_;
tcp::resolver::iterator endpoint_iter_;
tcp::resolver resolver_; //to healp resolving hostname and ip
stringstream strstream;//create a stringstream
strstream << port;//add number to the stream
endpoint_iter_ = resolver_.resolve(tcp::resolver::query(ip.c_str(),strstream.str()));
start_connect(endpoint_iter_);
// Start the deadline actor. You will note that we're not setting any
// particular deadline here. Instead, the connect and input actors will
// update the deadline prior to each asynchronous operation.
deadline_timer_.async_wait(boost::bind(&dvr_obj::check_deadline, this));
//starting thread for dvr connection
io_service_.reset();
thread_ = new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service_));
метод start_connect
void start_connect(tcp::resolver::iterator endpoint_iter)
{
try
{
if (endpoint_iter != tcp::resolver::iterator())
{
drill_debug_info("trying to connect %s \n",name.c_str());
// Set a deadline for the connect operation.
deadline_timer_.expires_from_now(boost::posix_time::seconds(10));
// Start the asynchronous connect operation.
socket_.async_connect(endpoint_iter->endpoint(),
boost::bind(&dvr_obj::handle_connect,
this, _1, endpoint_iter));
}
else
{
// There are no more endpoints to try. Shut down the client.
connectivity = false;
}
} catch (int e) {
connectivity = false;
}
}
Так что я запутался, как изменить код выше для работы в сети IPV6. Не удалось найти решение в Интернете.
'resolver_.resolve()' возвращает итератор к списку записей. Ваш код просто использует первую запись. Вы можете найти запись IPv6, если вы перебираете список ... – kenba
Спасибо за ответ, можете ли вы дать мне код ссылки. – CodeDezk