| Предыдущий | Следующий |
| EOVERFLOW | ENOTUNIQ |
EPROGMISMATCH
EPROGMISMATCH — ошибка Darwin для несовпадения версии удалённой программы ONC RPC. Сервер принял вызов RPC и распознал программу, но не может обслужить запрошенную версию этой программы. Код намеренно уже ошибки версии самого протокола RPC: внешний протокол RPC может быть допустимым, а версия прикладной службы — несовместимой.
RFC 5531 определяет PROG_MISMATCH для такого принятого вызова. Ответ содержит минимальную и максимальную версии программы, поддерживаемые удалённым сервером. Эти границы являются ключевыми данными: они показывают, выбрал ли клиент устаревшую или слишком новую версию либо обратился к развёртыванию службы с другим диапазоном совместимости.
Используйте диапазон версий, а не предположения
- Сохраните запрошенные номер и версию программы вместе с предоставленными сервером минимальной и максимальной поддерживаемыми версиями.
- Сравните определение интерфейса RPC и сгенерированные заглушки клиента с развёрнутым сервером, а не только с исходным кодом другой ветви или среды.
- Для такой службы, как NFS, определите версию протокола, настроенную на клиенте и сервере. Сервер может быть доступен и экспортировать программу, но отклонять конкретно запрошенную версию.
- Учитывайте состояние развёртывания: смешанные версии серверов за одной конечной точкой могут приводить к успеху одного и отказу другого узла для одинакового запроса.
Чего этот код не означает
- Это не
ERPCMISMATCH; тот код относится к версии сетевого протокола RPC. - Это не
EPROGUNAVAIL; здесь программа существует, но запрошенная версия находится вне поддерживаемого диапазона. - Это не
EPROCUNAVAIL; тот код относится к процедуре, отсутствующей в уже выбранных программе и версии.
Ссылки
- Apple XNU: errno.h
- RFC 5531: PROG_MISMATCH и диапазон поддерживаемых версий
- RFC 1833: контекст привязки ONC RPC
Нужно найти другой код? Найти другой код состояния или ошибки.