xdrstdio_create: блокировка звонков

Я пытаюсь использовать rpc/xdr.h библиотека для разработки простого взаимодействия клиент / сервер. Я использую "прямое соединение", при котором библиотека xdr получит на сокете и вернет переведенные данные:

XDR xdrs_in;
FILE* fstream_in;
fstream_in=fdopen(coonnected_socket, "r");
xdrstdio_create(&xdrs_in, fstream_in, XDR_DECODE);

XDR_data_type a;
xdr_XDR_data_type(&xdrs_in, &a);

С XDR_data_type тип, определенный и скомпилированный с использованием rpcgen. Предположим, что XDR_data_type действительно большой, а другая часть закрывает соединение (изящно или нет) во время xdr_XDR_data_type вызов, он будет блокировать ожидание оставшихся данных? Это проблема, которая с помощью recv I решается с помощью SELECT(), чтобы установить время ожидания на время ожидания.

Я знаю, что самый естественный ответ на этот вопрос - "попробуй сам", но таким образом я не могу быть на 100% уверен в поведении, я не могу узнать, как его решить, и на странице справки у меня нет нашел что-нибудь об этом.

Спасибо за внимание

РЕДАКТИРОВАТЬ

Это код, сгенерированный rpcgen для xdr_XDR_data_type

bool_t
xdr_XDR_data_type (XDR *xdrs, XDR_data_type *objp)
{
    register int32_t *buf;

     if (!xdr_enum (xdrs, (enum_t *) objp))
         return FALSE;
    return TRUE;
}

Да, он возвращает bool_t, но я полагаю, что это зависит от самого перевода (т. Е. Если целое число является действительным целым числом в отображении перечисления), а не от успеха при получении или не самих данных.

0 ответов

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