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