- c->out.out_fd.cmsghdr.cmsg_len = msg.msg_controllen;
- c->out.out_fd.cmsghdr.cmsg_level = SOL_SOCKET;
- c->out.out_fd.cmsghdr.cmsg_type = SCM_RIGHTS;
+ struct cmsghdr *hdr = CMSG_FIRSTHDR(&msg);
+
+ hdr->cmsg_len = msg.msg_controllen;
+ hdr->cmsg_level = SOL_SOCKET;
+ hdr->cmsg_type = SCM_RIGHTS;
+ memcpy(CMSG_DATA(hdr), c->out.out_fd.fd, c->out.out_fd.nfd * sizeof (int));
+