2.3 KiB
title
| title |
|---|
| Events |
Mongoose accepts incoming connections, reads and writes data and calls specified event handlers for each connection when appropriate. A typical event sequence is this:
- For an outbound connection:
MG_EV_CONNECT-> (MG_EV_RECV,MG_EV_SEND,MG_EV_POLL...) ->MG_EV_CLOSE - For an inbound connection:
MG_EV_ACCEPT-> (MG_EV_RECV,MG_EV_SEND,MG_EV_POLL...) ->MG_EV_CLOSE
Below is a list of core events triggered by Mongoose (note that each protocol triggers protocol-specific events in addition to the core ones):
-
MG_EV_ACCEPT: sent when a new server connection is accepted by a listening connection.void *ev_dataisunion socket_addressof the remote peer. -
MG_EV_CONNECT: sent when a new outbound connection created bymg_connect()either failed or succeeded.void *ev_dataisint *success. Ifsuccessis 0, then the connection has been established, otherwise it contains an error code. Seemg_connect_opt()function for code example. -
MG_EV_RECV: New data is received and appended to the end ofrecv_mbuf.void *ev_dataisint *num_received_bytes. Typically, event handler should check received data innc->recv_mbuf, discard processed data by callingmbuf_remove(), set connection flagsnc->flagsif necessary (seestruct mg_connection) and write data the remote peer by output functions likemg_send().WARNING: Mongoose uses
realloc()to expand the receive buffer. It is the user's responsibility to discard processed data from the beginning of the receive buffer, note thembuf_remove()call in the example above. -
MG_EV_SEND: Mongoose has written data to the remote peer and discarded written data from themg_connection::send_mbuf.void *ev_dataisint *num_sent_bytes.NOTE: Mongoose output functions only append data to the
mg_connection::send_mbuf. They do not do any socket writes. An actual IO is done bymg_mgr_poll(). AnMG_EV_SENDevent is just a notification about an IO has been done. -
MG_EV_POLL: Sent to all connections on each invocation ofmg_mgr_poll(). This event could be used to do any housekeeping, for example check whether a certain timeout has expired and closes the connection or send heartbeat message, etc. -
MG_EV_TIMER: Sent to the connection ifmg_set_timer()was called.