6.2.5 QMGR_QUEUE:收信域信息

来源:互联网 发布:药品零售软件 编辑:程序博客网 时间:2024/05/21 11:30

struct QMGR_QUEUE {   int     dflags;                           /* delivery requestoptions */   time_t  last_done;                            /* last deliverycompletion */   char   *name;                          /* domain name oraddress */   char   *nexthop;                      /* domain name */   int     todo_refcount;           /* queue entries (todo list) */   int     busy_refcount;           /* queue entries (busy list) */   int     window;                       /* slow open algorithm */   double  success;                       /* accumulated positivefeedback */   double  failure;                         /* accumulated negativefeedback */   double  fail_cohorts;               /* pseudo-cohort failure count */   QMGR_TRANSPORT *transport;              /*transport linkage */   QMGR_ENTRY_LIST todo;                 /*todo queue entries */   QMGR_ENTRY_LIST busy;                 /*messages on the wire */   QMGR_QUEUE_LIST peers;              /*neighbor queues */   DSN    *dsn;                            /* why unavailable*/   time_t  clog_time_to_warn;                   /* time of last warning */   int     blocker_tag;                /* tagged if blocks job list */};

window:被初始化为QMGR_TRANSPORT的init_dest_concurrency字段值。该值随着运行情况发生变化。

 

QMGR_QUEUE维持着两个QMGR_ENTRY_LIST链表:todo和busy,分别表示待发邮件和已经处于发信流程的邮件。qmgr模块最终将使用QMGR_ENTRY结构体中记录的信息发信。每当一个QMGR_ENTRY结构体被选中,将其从todo链表搬迁到busy链表,表示即将用其进行发信操作。同时变更todo_refcount和busy_refcount的值:

/qmgr/qmgr_entry.c/* qmgr_entry_select - select queueentry for delivery */ QMGR_ENTRY*qmgr_entry_select(QMGR_PEER *peer){   const char *myname = "qmgr_entry_select";   QMGR_ENTRY *entry;   QMGR_QUEUE *queue;    if ((entry = peer->entry_list.next) != 0) {         queue= entry->queue;         QMGR_LIST_UNLINK(queue->todo,QMGR_ENTRY *, entry, queue_peers);         queue->todo_refcount--;         QMGR_LIST_APPEND(queue->busy,entry, queue_peers);         queue->busy_refcount++;


0 0
原创粉丝点击