Порядок и ретрансляция linux rpc

Мы используем RPC (сокет udp) в нашем приложении, и мы заметили, что RPC повторно передает ему сообщения, когда оно не было получено (или подтверждено) целевым приложением.

RPC представляет порядок сообщений? допустим, у нас есть сообщение 1 и сообщение 2, ожидает ли получатель подтверждения сообщения 1, а затем отправляет сообщение 2?

Кроме того, я не смог найти, сколько повторных попыток выполняется по умолчанию, и если отправка не удалась после повторных попыток, регистрируется ли она где-нибудь, чтобы мы могли ее проверить?

Спасибо

1 ответ

Решение

В библиотеке RPC есть вызов для контроля того, как долго ждать, прежде чем повторить запрос:

 struct timeval tv;
 clnt_control(cl, CLSET_TIMEOUT, (char *) &tv);

когда вы вызываете вызов rpc, вы указываете общее время ожидания:

 enum clnt_stat clnt_call(CLIENT *clnt, unsigned long procnum,
                       xdrproc_t inproc, char *in,
                       xdrproc_t outproc, char *out,
                       struct timeval tout);

если вы разделите значение tout на значение, которое вы установили с помощью clnt_control, вы получите количество повторных попыток.

Поведение синхронизации / асинхронности зависит только от вашего приложения.

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