void *ev_data是int *num_sent_bytes即发送的字节数。mongoose输出函数仅仅是将数据追加到sned_mbuf,不做任何socket写操作。实际的IO写操作是由mg_mgr_pool()完成,MG_EV_SEND仅仅是一个关于IO操作已经完成的通知。 MG_EV_POLL:将每次调用mg_mgr_poll()发送到每个链接。此事件可做任何事情。例如检测某个超时...
一个MG_EV_SEND事件是关于IO已经完成的通知。 MG_EV_POLL:发送到每个调用的所有连接mg_mgr_poll()。此事件可用于执行任何内务处理,例如检查某个超时是否过期并关闭连接或发送心跳消息等。 MG_EV_TIMER发送到连接如果mg_set_timer()被调用。 连接标志 每个连接都有一个flags位字段。一些标志由Mongoose设置,例如,...
MG_EV_POLL:在每次调用mg_mgr_poll()时发送到所有连接。该事件被用于做任何事情,例如,检查某个超时是否已过期并关闭连接或发送心跳消息等。 MG_EV_TIMER: 当mg_set_timer()调用后,发送到连接。 TCP服务器示例 #include"mongoose.h"// Include Mongoose API definitions// Define an event handler functionstati...
实际的IO写操作是由mg_mgr_pool()完成,MG_EV_SEND仅仅是一个关于IO操作已经完成的通知。 MG_EV_POLL:将每次调用mg_mgr_poll()发送到每个链接。此事件可做任何事情。例如检测某个超时链接是否关闭,或者发送心跳。 MG_EV_TIMER: 向某个调用mg_set_timer()的链接发送 链接flags: 每个链接都有flasg位域。有些...
void mg_mgr_poll(struct mg_mgr *mgr, int ms); 执行轮询迭代,对于在监听链表中的每一个连接 1.查看是否有传入数据,如果有,将其读入到读缓冲区中,并发送 MG_EV_READ事件 2.查看是否有数据在写缓冲区,并且写入,发送MG_EV_WRITE事件 3.如果连接正在侦听,则接受传入连接(如果有),并向其发送MG_EV_accept...
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { switch (ev) { /* Event handler code that defines behavior of the connection */ ... } } 1. 2. 3. 4. 典型的事件序列如下: 对于客户端:MG_EV_CONNECT -> (MG_EV_RECV, MG_EV_SEND, MG_EV_POLL …) ->...
1.查看是否有传入数据,如果有,将其读入到读缓冲区中,并发送 MG_EV_READ事件 2.查看是否有数据在写缓冲区,并且写入,发送MG_EV_WRITE事件 3.如果连接正在侦听,则接受传入连接(如果有),并向其发送MG_EV_accept事件 4.发送MG_EV_POLL事件 参数: mgr:一个事件管理器 ...
{.root_dir="."};if(ev==MG_EV_HTTP_MSG)mg_http_serve_dir(c,ev_data,&opts);}intmain(intargc,char*argv[]){structmg_mgrmgr;mg_mgr_init(&mgr);// Setup listenermg_http_listen(&mgr,"http://localhost:8000",fn,&mgr);// Event loopfor(;;)mg_mgr_poll(&mgr,1000);mg_mgr_free(...
(ev == MG_EV_HTTP_MSG) mg_http_serve_dir(c, ev_data, &opts);}intmain(intargc,char*argv[]){structmg_mgrmgr;mg_mgr_init(&mgr);// Setup listenermg_http_listen(&mgr,"http://localhost:8000", fn, &mgr);// Event loopfor(;;) mg_mgr_poll(&mgr,1000); mg_mgr_free(&mgr);...
static void ev_handler(struct mg_connection* nc, int ev, void* ev_data) { if (ev == MG_EV_HTTP_REQUEST) { struct http_message* hm = (struct http_message*)ev_data; mg_send_head(nc, 200, hm->message.len, 'Content-Type: text/plain'); ...