+void connect_resolver_host(struct host *host, iochan_man_t iochan_man)
+{
+ struct connection *con;
+
+start:
+ yaz_mutex_enter(host->mutex);
+ con = host->connections;
+ while (con)
+ {
+ if (con->state == Conn_Closed)
+ {
+ if (!host->ipport) /* unresolved */
+ {
+ remove_connection_from_host(con);
+ yaz_mutex_leave(host->mutex);
+ connection_destroy(con);
+ goto start;
+ /* start all over .. at some point it will be NULL */
+ }
+ else if (!con->client)
+ {
+ remove_connection_from_host(con);
+ yaz_mutex_leave(host->mutex);
+ connection_destroy(con);
+ /* start all over .. at some point it will be NULL */
+ goto start;
+ }
+ else
+ {
+ yaz_mutex_leave(host->mutex);
+ connection_connect(con, iochan_man);
+ client_start_search(con->client);
+ goto start;
+ }
+ }
+ else
+ {
+ yaz_log(YLOG_LOG, "connect_resolver_host: state=%d", con->state);
+ con = con->next;
+ }
+ }
+ yaz_mutex_leave(host->mutex);
+}
+