On Mon, 2016-03-14 at 00:57 +0100, Samuel Thibault wrote: > Hello, > > Svante Signell, on Sun 13 Mar 2016 14:19:35 +0100, wrote: > > Running the code reveals that the current implementation in glibc is buggy: > > > > ./scm_rights+creds_recv > > Number of SCM_RIGHTS [<=3], SCM_CREDS [<=2]: [1,1] > > Input error: Using defaults: > > NRIGHTS = 1, NCREDS = 1 > > scm_rights+creds_send.c: msgh.msg_controllen = 112 (from control_un) > > Receiving via datagram socket > > recvmsg: (os/kern) invalid right > > I've had a closer look, what happens here is that the > mach_port_mod_refs() call on the rendezvous port fails because the port > type of the rendezvous port is DEADNAME, i.e. the other end dropped the > port. Indeed, your sending program terminates as soon as it has sent > its message. You need to make it wait at least a bit for the receiver > to get to receive the credentials.
Well, the program works perfectly on kFreeBSD (Linux is different). And with my old implementation it worked perfectly too. Maybe the recvmsg/sendmsg code has to be modified?