Невозможно закодировать аргументы в удаленном вызове процедуры для регистрации сервера
Я немного схожу с ума, пытаясь понять, почему это не работает. Я использую 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, но я оставляю это на всякий случай, если кто-то столкнется с той же проблемой. Убедитесь, что номер вашей программы правильный!