This here will not set CLOEXEC on the fds.
Can use MSG_CMSG_CLOEXEC on linux, but otherwise need to poll()/select() for data and then run recvmsg with the forklock held and then set CLOEXEC on the recieved fds.