Conn_Connecting,
Conn_Open
} state;
+ int connect_timeout;
+ int session_timeout;
struct connection *next; // next for same host or next in free list
};
// Creates a new connection for client, associated with the host of
// client's database
-static struct connection *connection_create(struct client *cl)
+static struct connection *connection_create(struct client *cl,
+ int connect_timeout,
+ int session_timeout)
{
struct connection *new;
struct host *host = client_get_host(cl);
client_set_connection(cl, new);
new->link = 0;
new->state = Conn_Resolving;
+ new->connect_timeout = connect_timeout;
+ new->session_timeout = session_timeout;
if (host->ipport)
connection_connect(new);
return new;
case ZOOM_EVENT_CONNECT:
yaz_log(YLOG_LOG, "Connected to %s", client_get_url(cl));
co->state = Conn_Open;
- iochan_settimeout(iochan, global_parameters.z3950_session_timeout);
+ iochan_settimeout(iochan, co->session_timeout);
break;
case ZOOM_EVENT_RECV_SEARCH:
client_search_response(cl);
con->link = link;
con->iochan = iochan_create(0, connection_handler, 0);
con->state = Conn_Connecting;
- iochan_settimeout(con->iochan, global_parameters.z3950_connect_timeout);
+ iochan_settimeout(con->iochan, con->connect_timeout);
iochan_setdata(con->iochan, con);
iochan_setsocketfun(con->iochan, socketfun);
iochan_setmaskfun(con->iochan, maskfun);
}
// Ensure that client has a connection associated
-int client_prep_connection(struct client *cl)
+int client_prep_connection(struct client *cl,
+ int connect_timeout, int session_timeout)
{
struct connection *co;
struct session *se = client_get_session(cl);
co->client = cl;
/* tells ZOOM to reconnect if necessary. Disabled becuase
the ZOOM_connection_connect flushes the task queue */
+ co->connect_timeout = connect_timeout;
+ co->session_timeout = session_timeout;
ZOOM_connection_connect(co->link, 0, 0);
}
else
{
- co = connection_create(cl);
+ co = connection_create(cl, connect_timeout, session_timeout);
}
}