IOS boost asio connect from ipv6 network

Estoy intentando conectar un dvr utilizando la biblioteca boost asio en ios. La aplicación funciona bien en el emulador con la networking ipv4. Pero cuando presento la aplicación en Apple Appstore rechazé la aplicación ya que no funciona en la networking ipv6. Y puedo ver en el sitio de Apple que la aplicación debería ser compatible con la networking ipv6. https://developer.apple.com/news/?id=05042016a

Así que creo que el problema se presenta en la sección donde bash conectar el DVR usando la librería boost, donde la dirección IP de la DVR se extrae de la database (hard-coded) y debajo está la parte relevante del código.

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_)); 

método 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; } } 

Así que estoy confundido cómo cambiar el código anterior para trabajar en la networking IPV6. No se pudo encontrar ninguna solución en Internet.

Puede iterar a través de los puntos finales para encontrar un punto final IPv6 usando el código a continuación:

 endpoint_iter_ = resolver_.resolve(tcp::resolver::query(ip.c_str(),strstream.str())); while (endpoint_iter_ != tcp::resolver::iterator()) { if (endpoint_iter_->endpoint().protocol() == tcp::v6()) break; ++endpoint_iter_; } if (endpoint_iter_ != tcp::resolver::iterator()) { start_connect(endpoint_iter_); ... } else std::cerr << "IPv6 host not found" << std::endl;