Re[2]: отправка писем с аттачем из лвс с kerio
От: Black_Moon  
Дата: 16.08.07 08:05
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, Black_Moon, Вы писали:


B_M>>Написал smtp клиента


N>Код некорректен, не полностью описан (пропущены существенные моменты), и зверски неоптимален.

N>_recv() читает просто приходящий кусок или строку? Если первое, он некорректен. Если второе, он или резко неоптимален (читает по байту), или использует секретный буфер, недокументированный в показанном коде.
N>Зачем сокету выставлялся nonblocking, если это не используется? Если используется, где задание таймаутов?
N>Почему размер буфера для одной команды равен MESSAGE_SIZE? При чём тут message?
N>Зачем столько раз повторять код отсылки заголовков по одному?
N>Зачем вызывать strlen сразу после sprintf_s?
N>Добавляет ли encode64() нужные \r\n?
N>Чему равен BLOCK_SIZE? Значение выше 57 — ошибка. И файл лучше читать через stdio, чтобы не делать лишние сисколлы.
N>Зачем реагировать на ошибки от QUIT?

N>Итого. За код — твёрдая двойка. Копать дальше не хочу. "Ваши крокодилы — вы и спасайте"



N>_recv() читает просто приходящий кусок или строку

_recv() читает все что приходит от сервера за один заход (просто стоит ограничение на буфер — BLOCK_SIZE = 1023)

N>Зачем сокету выставлялся nonblocking, если это не используется? Если используется, где задание таймаутов?

сокет non-blocking — так как все _connect(), _send() и _recv() используют select с таймаутами (просто код не приведен).
N>Почему размер буфера для одной команды равен MESSAGE_SIZE? При чём тут message?
Дело в том что я использую 2 буфера — один для отправки сообщений — 2й для получения ответа, соотв у них разные размеры.

N>Зачем столько раз повторять код отсылки заголовков по одному?

Зачем реагировать на ошибки от QUIT?
Тут верно — лишнее написано.

N>Чему равен BLOCK_SIZE? Значение выше 57 — ошибка.

Здесь можно поподробнее — откуда такая цифка 57.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.