--- mqtt/src/daemon.c 2012/05/05 15:04:29 1.2.2.26 +++ mqtt/src/daemon.c 2012/05/08 11:45:57 1.2.2.28 @@ -39,7 +39,7 @@ initSession(int sock, ait_val_t * __restrict v) } /* init server actor */ - sess->sess_srv = mqtt_srv_Init(sock, sess->sess_buf); + sess->sess_srv = mqtt_srv_Init(sock, sess->sess_buf, sess->sess_ka); if (!sess->sess_srv) { ioDEBUG(3, "Error:: in srv_Init #%d - %s", mqtt_GetErrno(), mqtt_GetError()); mqtt_msgFree(&sess->sess_buf, 42); @@ -153,10 +153,14 @@ dispatchSession(sched_task_t *task) do { /* dispatch message type */ if ((len = mqtt_srv_Dispatch(sess->sess_srv, ret, sess)) < 0) { - if (len == -1) + if (len == -1) { ioLIBERR(mqtt); - TAILQ_REMOVE(&Sessions, sess, sess_node); - finiSession(sess); + finiSession(sess); + } else if (len == -2) { + TAILQ_REMOVE(&Sessions, sess, sess_node); + finiSession(sess); + } else if (len == -3) + schedEvent(root, startSession, NULL, (u_long) TASK_FD(task), sess, ret); } else ret -= len; } while (len > 0 && ret > 0); @@ -219,6 +223,8 @@ startSession(sched_task_t *task) sess->sess_will.qos = flg.will_qos; sess->sess_will.retain = flg.will_retain; sess->sess_will.flag = flg.will_flg; + + sess->sess_srv->timeout = sess->sess_ka; } /* check online table for user */