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