Comment 5 for bug 1774431

Revision history for this message
In , Steve (steve-redhat-bugs) wrote :

In Comment 3 I was mistaken with that again loop since
the errno being returned from accept is EINVAL not
EINTR.

The reason for this looping and accept returning
EINVAL is a listen(2) call is not being done the
the fd used to create the SVCXPRT pointer.

The reason a listen is not done is because
svc_tli_create() is given pre-created socket
and a bound socket. In this cause svc_tli_create()
will not call listen().

In the glibc code, a listen was called, I proved
that with strace, but I'm not sure from where
since I can not find a svc_til_create() in the
older (Fedora 27) glibc code.

Since there does not seem to be an upstream
git tree, I can not tell when that call
was added. Was that call recently added?

So the assumption is made by the tirpc version
of svc_tli_create() is when handed a socket that
is bound, its assumed the listen call has also
been made. In other apps using it (in nfs-utils)
this is the case.