Я думаю, что общая схема программирования сокетов для отправки сообщений:
static const struct sockaddr_nl snl = {
.nl_family = AF_NETLINK
};
return sendto(nl->fd, buf, len, 0, (struct sockaddr *) &snl, sizeof(snl));
, где struct sockaddr_*
зависит от типа сокета. Приведенный выше код вызывает valgrind
жалобу:
Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
Это очевидно, потому что остальные члены struct sockaddr_nl
не инициализированы.
Вот как это выглядит в моей системе (Ubuntu 16.04):
struct sockaddr_nl {
__kernel_sa_family_t nl_family; /* AF_NETLINK */
unsigned short nl_pad; /* zero */
__u32 nl_pid; /* port ID */
__u32 nl_groups; /* multicast groups mask */
};
Так что мой вопрос - безопасно ли инициализировать nl_pid
и nl_groups
в ноль в случае операции sendto()
?