Как обвязка сообщает об ошибке

API error reporting
Исключение в C++, признак успеха в C

Две модели ошибок в одном интерфейсе. В C++ любая ошибка бросает исключение, и объект после неё негоден — его выбрасывают и создают заново. В C функции возвращают признак успеха, а причину отдают …GetLastError и …GetLastErrorType — у соединения, письма и получателя свои.

Следствие одно для обеих: частичного восстановления внутри объекта нет, и единица успеха — пакет подачи. Поэтому руководство и советует держать пакет не больше 5000 получателей: неудача заденет меньше адресов.

Главная ловушка — повторять вызов на том же объекте. После ошибки объект негоден в обеих обвязках: повтор на нём не поможет, нужен новый объект — и повторная подача всего пакета.
Что делает Хаб. Обвязками не пользуется; при подаче по SMTP ошибку сообщает ответ узла на команду.
Рекомендуемые значения

Как узнать об ошибке:

Обвязка Сигнал Что с объектом
C++ исключение выбросить
C возврат FALSE, затем …GetLastError освободить …Free
Две модели ошибок и негодность объекта после ошибки — из руководства (§ 7.4, § 7.5); совет про размер пакета — § 7.1. Вывод про единицу успеха — наш.
Пример в конфигурации
# C: текст и тип последней ошибки соединения
if (!PmtaConnSubmit(conn, msg)) printf("%s %d", PmtaConnGetLastError(conn), PmtaConnGetLastErrorType(conn));
Тип ошибки — один из кодов PmtaApiERROR, объявленных в PmtaApi.h.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Найти перечень кодов ошибок обвязки:
grep -rn 'PmtaApiERROR' /opt/pmta/api/include/ | head
Коды объявлены в заголовке обвязки: по типу программа решает, что делать с пакетом.
В Хабе
Цена ошибки
безопасно: неверное значение ничего не ломает
Сценарии
Подключить платформу отправки