xdrstdio_create:阻止调用

时间:2017-06-24 07:18:52

标签: c sockets xdr

我正在尝试使用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我使用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 个答案:

没有答案