@@ -166,12 +166,16 @@ static void throw_server_error(const Mysqlx::Error &error)
166166}
167167
168168
169- XProtocol::XProtocol (const Ssl_config &ssl_config, const std::size_t timeout, const bool dont_wait_for_disconnect)
169+ XProtocol::XProtocol (const Ssl_config &ssl_config,
170+ const std::size_t timeout,
171+ const bool dont_wait_for_disconnect,
172+ const Internet_protocol ip_mode)
170173: m_sync_connection(ssl_config.key, ssl_config.ca, ssl_config.ca_path,
171174 ssl_config.cert, ssl_config.cipher, ssl_config.tls_version, timeout),
172175 m_client_id(0 ),
173176 m_trace_packets(false ), m_closed(true ),
174- m_dont_wait_for_disconnect(dont_wait_for_disconnect)
177+ m_dont_wait_for_disconnect(dont_wait_for_disconnect),
178+ m_ip_mode(ip_mode)
175179{
176180 if (getenv (" MYSQLX_TRACE_CONNECTION" ))
177181 m_trace_packets = true ;
@@ -225,15 +229,20 @@ void XProtocol::connect(const std::string &host, int port)
225229 memset (&hints, 0 , sizeof (hints));
226230 hints.ai_socktype = SOCK_STREAM;
227231 hints.ai_protocol = IPPROTO_TCP;
228- hints.ai_family = AF_INET;
232+ hints.ai_family = AF_UNSPEC;
233+
234+ if (IPv6 == m_ip_mode)
235+ hints.ai_family = AF_INET6;
236+ else if (IPv4 == m_ip_mode)
237+ hints.ai_family = AF_INET;
229238
230239 gai_errno= getaddrinfo (host.c_str (), port_buf, &hints, &res_lst);
231240 if (gai_errno != 0 )
232241 throw Error (CR_UNKNOWN_HOST, " No such host is known '" + host + " '" );
233242
234243 for (t_res= res_lst; t_res; t_res= t_res->ai_next )
235244 {
236- error = m_sync_connection.connect ((sockaddr_in *)t_res->ai_addr , t_res->ai_addrlen );
245+ error = m_sync_connection.connect ((sockaddr *)t_res->ai_addr , t_res->ai_addrlen );
237246
238247 if (!error)
239248 break ;
0 commit comments