0

我正在尝试使用该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_typerpcgen 定义和编译的类型。假设 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,但我想它取决于翻译本身(即,如果整数是枚举映射中的有效整数),而不是接收成功或不是数据本身。

4

0 回答 0