2015-04-17 5 views
4

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

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

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

$ 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? Почему аргумент кодирования заставляет программу даже не регистрироваться?

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

ответ

0

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

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

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

0x30D0D0DF.

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