So, looking at various things around the place, it feels like `msg_controllen` should be set with the `CMSG_LEN()` macro, having previously allocated memory of size returned by the `CMSG_SPACE()` macro.  i.e. depending on how many file descriptors we wish to be able to receive in a single message:

```c
#define   MAX_RECV_FD_COUNT     16
#define   SCM_RIGHTS_LENGTH     (MAX_RECV_FD_COUNT * sizeof (int))

char cmsg_space[CMSG_SPACE(SCM_RIGHTS_LENGTH)];

cmsg.cmsg_len = msg.msg_controllen = CMSG_LEN(SCM_RIGHTS_LENGTH);
```