Ari Arantes wrote: > Rafael, > > Tudo que falou do qmail é verdade, eu sei que a versão netqmail-1.0.5 > não é versão mais nova.. Na própria página diz que a 1.0.3 + patchs já > aplicados. > > Sempre gostei do qmail. Uso desde 1998. Nunca tive problemas com ele, > mas como falei, o que me incomoda é o fato de mandar várias conexões > simultâneas para o mesmo host. > (snip)
tente este patch: --- qmail-send.c.orig Sat May 27 12:09:30 2006 +++ qmail-send.c Sat May 27 15:51:11 2006 @@ -776,11 +776,13 @@ unsigned long delid; seek_pos mpos; stralloc recip; + stralloc remotedomain; } ; unsigned long masterdelid = 1; unsigned int concurrency[CHANNELS] = { 10, 20 }; +unsigned int concurrencyremotedomain = 10; unsigned int concurrencyused[CHANNELS] = { 0, 0 }; struct del *d[CHANNELS]; stralloc dline[CHANNELS]; @@ -811,7 +813,7 @@ while (!(d[c] = (struct del *) alloc(concurrency[c] * sizeof(struct del)))) nomem(); for (i = 0;i < concurrency[c];++i) - { d[c][i].used = 0; d[c][i].recip.s = 0; } + { d[c][i].used = 0; d[c][i].recip.s = 0; d[c][i].remotedomain.s = 0; } dline[c].s = 0; while (!stralloc_copys(&dline[c],"")) nomem(); } @@ -840,12 +842,33 @@ { int i; int c; + char *domain = (char *)0; + unsigned int remotedomain = 0; c = jo[j].channel; if (!flagspawnalive[c]) return; if (!comm_canwrite(c)) return; - for (i = 0;i < concurrency[c];++i) if (!d[c][i].used) break; + if (c == 1) { domain = recip; while(*domain) if (*domain++ == '@') break; } + + for (i = 0;i < concurrency[c];++i) + { + if (remotedomain >= concurrencyremotedomain) + { + log3("warning: reach max count to remote domain [", domain, "]\n"); + return; + } + if (d[c][i].used) + { + if (domain && str_diff(d[c][i].remotedomain.s, domain) == 0) ++remotedomain; + } + else + { + if (!stralloc_copys(&d[c][i].remotedomain,domain)) { nomem(); return; } + if (!stralloc_0(&d[c][i].remotedomain)) { nomem(); return; } + break; + } + } if (i == concurrency[c]) return; if (!stralloc_copys(&d[c][i].recip,recip)) { nomem(); return; } @@ -1445,6 +1468,7 @@ if (control_readint(&lifetime,"control/queuelifetime") == -1) return 0; if (control_readint(&concurrency[0],"control/concurrencylocal") == -1) return 0; if (control_readint(&concurrency[1],"control/concurrencyremote") == -1) return 0; + if (control_readint(&concurrencyremotedomain,"control/concurrencyremotedomain") == -1) return 0; if (control_rldef(&envnoathost,"control/envnoathost",1,"envnoathost") != 1) return 0; if (control_rldef(&bouncefrom,"control/bouncefrom",0,"MAILER-DAEMON") != 1) return 0; if (control_rldef(&bouncehost,"control/bouncehost",1,"bouncehost") != 1) return 0; Nao se esqueca de configurar a nova variavel /var/qmail/control/concurrencyremotedomain para o numero maximo que vc deseja para as entregas por dominio. luiz ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd