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