Задать вопрос
p4s8x
@p4s8x

Exim: письма 8192 символов отправляются заметно дольше

Отправляю через SMTP локально.
письма размером до 8192 уходят за 0.004, после 8192 уходят за 0.1, т.е. в 25 раз медленее.
т.е. уже после отправления команды «DATA\r\n», отправляю само письмо

Поскольку число выглядит очень искусственно, подозреваю, что удерживает где-то какая-то настройка. Подскажите, в какую сторону стоит глядеть?

UPDATE:
Расковырял файлы exim'a, выяснил, что утечка происходит исключительно в нем самом.
конкретно
recieve.c:
data_file = fdopen(data_fd, «w+»);

message_ended = read_message_data_smtp(data_file); < — этот вызов съедает все время

static int
read_message_data_smtp(FILE *fout)
{
int ch_state = 0;
register int ch;
register int linelength = 0;

while ((ch = (receive_getc)()) != EOF)
{
if (ch == 0) body_zerocount++;
switch (ch_state)
{
case 0: /* After LF or CRLF */
if (ch == '.')
{
ch_state = 3;
continue; /* Don't ever write . after LF */
}
ch_state = 1;

/* Else fall through to handle as normal uschar. */

case 1: /* Normal state */
if (ch == '\n')
{
ch_state = 0;
body_linecount++;
if (linelength > max_received_linelength)
max_received_linelength = linelength;
linelength = -1;
}
else if (ch == '\r')
{
ch_state = 2;
continue;
}
break;

При этом
int (*receive_getc)(void) = stdin_getc;
int
stdin_getc(void)
{
return getc(stdin);
}
— когда в цикле прогоняется последний(>8000) кусок -резко происходит торможение, но никак не пойму причину. Может настройки самой оси стоит смотреть? FreeBSD 8.2-RELEASE стоит.
  • Вопрос задан
  • 2596 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Fiery_Fenix
@Fiery_Fenix
Очень похоже на минимальный размер письма попадающий под антивирус/антиспам. Точно не помню уже, но вроде у серверного Касперского такой минимальный размер. Из еще подозрительных — константа Exim-a DELIVER_OUT_BUFFER_SIZE, которая по умолчанию равна именно 8192, но это вроде размер блока на отсылку, а не на прием.
Вариант проверки — отдавать в цикле по 8192 байта в fputs и посмотреть результат.
Ответ написан
Комментировать
charon
@charon
дайте больше кода. Что в $data?
Ответ написан
p4s8x
@p4s8x Автор вопроса
я выяснил, что проблема на уровне exim'a, обновил текст вопроса, нужна помощь сишников
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽