timer 为 NGX_TIMER_INFINITE, 表示 事件阻塞为永久, 当 事件阻塞为永久时,由于 ngx 设置了定时器,所以能实现周期检查超时。 ngx_event_process_init() 设置了定时器 SIGALRM 的回调函数会设置 ngx_event_timer_alarm = 1。 由于ngx_event_timer_alarm 为 1 , 所以会调用 ngx_time_update() 由于更新了时间...
staticvoidngx_resolver_resend_handler(ngx_event_t*ev){time_ttimer, atimer, ntimer;ngx_resolver_t*r; r = ev->data; ngx_log_debug0(NGX_LOG_DEBUG_CORE, r->log,0,"resolver resend handler");/* lock name mutex */ntimer = ngx_resolver_resend(r, &r->name_rbtree, &r->name_resend_...
时器链表中的超时事件,超时则执行从而指向event的handler,然后进一步指向对应r或者u的->write_event_handler read_event_handler 3.也可以是利用定时器expirt实现的读写事件(参考ngx_http_set_write_handler->ngx_add_timer(ngx_event_add_timer)),触发过程见2,只是在handler中不会执行write_event_handler read_ev...
"timer delta: %M", delta); /* ngx_posted_accept_events是一个事件队列,暂存epoll从监听套接口wait到的accept事件。 前文提到的NGX_POST_EVENTS标志被使用后,会将所有的accept事件暂存到这个队列 */ if (ngx_posted_accept_events) { ngx_event_process_posted(cycle, &ngx_posted_accept_events); } //...
// 由ngx_event_expire_timers遍历定时器红黑树,找出所有过期的事件设置此标志位 unsigned timedout:1; // 事件是否在定时器里 // ngx_add_timer加入定时器时设置 // 处理完定时器事件后清除标记 unsigned timer_set:1; // 需要延迟处理,用于限速,nginx会暂不写数据 // 参考ngx_http_write_filter_...
ngx_event_timer_init(ngx_log_t *log) { ngx_rbtree_init(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel, ngx_rbtree_insert_timer_value); return NGX_OK; } ngx_msec_t ngx_event_find_timer(void) { ngx_msec_int_t timer;
//从ngx_event_timer_rbtree(定时器的红黑树中取出所有超时的定时器时间,并使用设定的handler处理该事件) void ngx_event_expire_timers(void) { ngx_event_t *ev; ngx_rbtree_node_t *node, *root, *sentinel; //哨兵(用于树的边界标识) sentinel = ngx_event_timer_rbtree.sentinel; ...
ngx_add_timer(rev, s->timeout);if(ngx_handle_read_event(rev,0) != NGX_OK) { ngx_rtmp_finalize_session(s);return; } } 开发者ID:ahmadrezamontazerolghaem,项目名称:VLB-CAC,代码行数:32,代码来源:proxy_protocol.c 示例5: ngx_rtmp_play_do_seek ...
#include <ngx_event.h> // 遍历监听端口列表,删除epoll监听连接事件,不接受请求 static ngx_int_t ngx_disable_accept_events(ngx_cycle_t *cycle, ngx_uint_t all); // 发生了错误,关闭一个连接 static void ngx_close_accepted_connection(ngx_connection_t *c); /...
static void ngx_http_dyups_read_msg_locked(ngx_event_t *ev) { ... sh = ngx_dyups_global_ctx.sh; shpool = ngx_dyups_global_ctx.shpool; for (i = 0; i < ccf->worker_processes; i++) { status = &sh->status[i]; if (status->pid == 0 || status->pid == ngx_pid) { ...