[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [mosquitto-dev] What's the difference between	"mqtt3_db_message_write" and "loop_handle_reads_writes"? | 
Hello guys,
Recently I have read the mosquito source code to understand how the mqtt broker works. But I still have some doubts even I read the code again and again.
In mosquito source code, we traversed all the context in mosquitto_main_loop as follows:
HASH_ITER(hh_sock, db->contexts_by_sock, context, ctxt_tmp)
{
    ...
    /*if the context is valid, we handle the msgs queued in context*/
    if(mqtt3_db_message_write(db, context) == MOSQ_ERR_SUCCESS)
    {
         ....
    }
    ...
    /*poll all the fd in pollfds*/
    fdcount = poll(pollfds, pollfd_index, 100);
    if(fdcount == -1){
        _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error in poll: %s.", strerror(errno));
    }else{
        /*we handle write and read events of pollfds*/
        loop_handle_reads_writes(db, pollfds);
        ...
    }
    ...
}In mqtt3_db_message_write , we deal with all the msgs with states below: mosq_ms_publish_qos0, mosq_ms_publish_qos1, mosq_ms_publish_qos2, mosq_ms_send_pubrec, mosq_ms_resend_pubrel, mosq_ms_resend_pubcomp. Then we call _mosquitto_packet_queue to put the packet into out_packet list. Finaly we call _mosquitto_packet_write to send all the packets out. For example
/*the call stack when we handle with msgs in 'mosq_ms_publish_qos0' states */
case mosq_ms_publish_qos0 -> _mosquitto_send_publish -> _mosquitto_send_real_publish -> 
_mosquitto_packet_queue -> _mosquitto_packet_write -> _mosquitto_net_write
In loop_handle_reads_writes, we still call the function _mosquitto_packet_write, but we have sent all the msgs in mqtt3_db_message_write as I described above . So I want to know the difference between mqtt3_db_message_write and the write action in loop_handle_reads_writes.
Can you help me ? Thanks a lot.
Regards,
Li Xiasong