/* temp place for resultset */
PGresult *last_result;
+
+ usec_t connect_time;
+ usec_t lifetime;
};
/* report event to user callback */
wait_event(db, EV_READ, connect_cb);
break;
case PGRES_POLLING_OK:
+ db->connect_time = get_time_usec();
send_event(db, PGS_CONNECT_OK);
break;
default:
pgs->base = base;
}
+void pgs_set_lifetime(struct PgSocket *pgs, double lifetime)
+{
+ pgs->lifetime = USEC * lifetime;
+}
+
void pgs_connect(struct PgSocket *db)
{
if (db->con)
Assert(!db->wait_type);
+ if (db->con && db->lifetime) {
+ usec_t now = get_time_usec();
+ if (db->connect_time + db->lifetime < now) {
+ pgs_disconnect(db);
+ db->reconnect = true;
+ }
+ }
+
tv.tv_sec = timeout;
tv.tv_usec = (timeout - tv.tv_sec) * USEC;
/** Change the event base for PgSocket */
void pgs_set_event_base(struct PgSocket *pgs, struct event_base *base);
+/** Set connection lifetime (in seconds) */
+void pgs_set_lifetime(struct PgSocket *pgs, double lifetime);
+
/** Launch connection */
void pgs_connect(struct PgSocket *db);