Есть некое embedded устройство с linux. На нем работает некий демон, запускаемый через systemd.
Задача - перезапуск демона при изменении подключения к сети. То есть если поднято/опущено любое сетевое соединение.
Для перезапуска достаточно завершить демон, systemd его само запускает обратно.
Вопрос - как наиболее просто и надежно это сделать, крайне желательно изнутри демона? Демон на языке C.
Что пробовал:
int nl_socket = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
addr.nl_family = AF_NETLINK;
addr.nl_pid = getpid ();
addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
bind (nl_socket, (struct sockaddr *) &addr, sizeof (addr));
и так далее. В целом это работает, но столкнулся с проблемой - если в сети выполнить arp-scan, срабатывает такой детектор и демон неправомерно перезапускается.
Как это сделать минимально сложно и максимально надежно?