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