From ce01c3253b7f6acb1e25a26e8de4e013aed52bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Wed, 22 Apr 2020 17:43:55 +0200 Subject: [PATCH] Only send data if interface is running MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the macnocker client tries to send data, but the interface is not running, this will result in error messages. However, an interface being down is a valid state and should not result in error messages. So first check the current state of the interface before trying to send data. Fixes: #104 Signed-off-by: Fabian Bläse Acked-by: Adrian Schmutzler --- macnockclient.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/macnockclient.c b/macnockclient.c index 0ef19a2..cdfba53 100644 --- a/macnockclient.c +++ b/macnockclient.c @@ -86,6 +86,19 @@ void macNockClient_run() { log_trace("[c] sending\n"); + // check if bound interface is down, trying to send data would result in an error + if (!(ioctl(fd, SIOCGIFFLAGS, &ifr) == 0)) + { + perror("[c] ERROR: Can't read Interface information"); + goto retry; + } + if (!(ifr.ifr_flags & IFF_RUNNING)) + { + // interface is not running, silently ignore + log_debug("[c] interface is not running\n"); + goto retry; + } + int sent = sendto(fd, nock, len, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); if (sent == -1) { @@ -96,6 +109,7 @@ void macNockClient_run() perror("[c] ERROR: Can't send all data"); } +retry: usleep(1 * 1000 * 1000); // sleep 1 s }