Re: [LTP] [Libtirpc-devel] svc_vc_create/clnt_vc_create and RPC_ANYFD

Chuck Lever
2014-03-25T15:56:48Z

On Mar 25, 2014, at 8:35 AM, Stanislav Kholmanskikh <stanislav.kholmanskikh@oracle.com> wrote:

> Hi!
>
> Sorry, but yet another question regarding rpc-tirpc-full-test-suite.
>
> Some binaries from this suite pass RPC_ANYFD to svc_vc_create() or
> clnt_vc_create().
>
> Like this one -
> https://github.com/linux-test-project/ltp/blob/master/testcases/network/rpc/rpc-tirpc-full-test-suite/tests_pack/tirpc_svc_5/tirpc_svc_5.c
> :
>
> transp = svc_vc_create(RPC_ANYFD, 1024, 1024);
>
> And, of course, the tests using this fail.
>
> I dig into the libtirpc sources and didn't found anything that could
> state that we may pass RPC_ANYFD to these functions.
>
> From svc_vc_create() comments:
> "The filedescriptor passed in is expected to refer to a bound, but
> not yet connected socket."
>
> and from clnt_vc_create():
> "fd should be an open socket"
>
> So invoking svc_vc_create(RPC_ANYFD,...) or clnt_vc_create(RPC_ANYFD,
> ...) is incorrect. Right?

I don’t see anything in

http://docs.oracle.com/cd/E19504-01/802-5885/802-5885.pdf

that contradicts that.

AFAICT RPC_ANYFD is OK for the so-called “expert level” API, which means clnt_tli_create(3t) and svc_tli_create(3t).

It is also OK for the legacy APIs svctcp_create() and clnttcp_create() to take RPC_ANYSOCK.

--
Chuck Lever
chucklever@gmail.com