Невозможно закодировать аргументы в удаленном вызове процедуры для регистрации сервера

Я немного схожу с ума, пытаясь понять, почему это не работает. Я использую sunrpc, но сгенерированный код сервера выдает следующее:

Невозможно зарегистрировать службу: RPC: не могу закодировать аргументы
невозможно зарегистрироваться (MYRPC, MYRPC_V1, udp).

Я понятия не имею, почему это происходит. Я делаю следующее для создания заглушек:

$ rpcgen -NMC myrpc.x

Вот мой XDR

struct imgdata{
    opaque data<>;
};

program MYRPC {
    version MYRPC_V1 {
        imgdata minify(imgdata) = 1;
    } = 1;
} = 0x30D0D0DFF;

Я не получаю никаких ошибок при компиляции.x файла для создания клиента, сервера, кода сортировки xdr или заголовка. Я также реализовал интерфейс rpc, но не смог протестировать его, поскольку эта ошибка выдается в тот момент, когда я пытаюсь развернуть сгенерированный сервер (myrpc_svr.c).

На какие аргументы ссылается это сообщение об ошибке? Разве не нравится моя реализация моей функции, определенной в XDR? Почему аргумент кодирования заставляет программу даже не регистрироваться?

Я на самом деле очень удивлен, что это не сообщение об ошибке на стороне клиента

1 ответ

Решение

После нескольких часов потраченного времени оказывается, что ответ был таким простым: номер программы выходит за пределы допустимого.

program MYRPC {
    version     MYRPC_V1 {
        imgdata minify(imgdata) = 1;
    } = 1;
} = 0x30D0D0DFF;

Номер моей программы 0x30D0D0DFF содержит дополнительную цифру, F в конце концов это значение выходит за пределы допустимых номеров программ, определенных пользователем в соответствии со спецификацией в разделе 7.3 RFC 1831. Это должно было быть:

0x30D0D0DF.

Так что это всего лишь тонкая опечатка, которую я использовал при написании файла XDR, но я оставляю это на всякий случай, если кто-то столкнется с той же проблемой. Убедитесь, что номер вашей программы правильный!

Другие вопросы по тегам