diff --git a/telegraf/files/script/check_ovs_arping.py b/telegraf/files/script/check_ovs_arping.py
index 099532f..9a650be 100644
--- a/telegraf/files/script/check_ovs_arping.py
+++ b/telegraf/files/script/check_ovs_arping.py
@@ -127,7 +127,10 @@
         time_left -= time_received - time_start
         if not srecv[0]:
             return packets
-        data = soc.recv(PACKETSIZE)
+        try:
+            data = soc.recv(PACKETSIZE)
+        except OSError:
+            return packets
         if len(data) == PACKETSIZE and ord(data[21]) == ARPREPLY:
             ip_to = data[38:42]
             if ip_to == ip_bin:
@@ -142,10 +145,16 @@
 def make_subnet_arping(namespace, interface, mac_sedr, ip_sedr, ip_recvrs):
     with Namespace(nsname=namespace):
         soc = socket.socket(socket.PF_PACKET, socket.SOCK_RAW)
-        soc.bind((interface, TYPEFRAME))
+        try:
+            soc.bind((interface, TYPEFRAME))
+        except OSError:
+            return set(), ip_recvrs
         for ip_recvr in ip_recvrs:
             bc_packet = ARPSendPacket('ff:ff:ff:ff:ff:ff', mac_sedr, ip_sedr, mac_sedr, ip_recvr, '00:00:00:00:00:00')
-            soc.send(bc_packet.__str__())
+            try:
+                soc.send(bc_packet.__str__())
+            except OSError:
+                return set(), ip_recvrs
         packets = recv_arp_packets(soc, socket.inet_aton(ip_sedr), ip_recvrs, TIMEOUT)
         res_addrs = set()
         for packet in packets:
@@ -160,7 +169,10 @@
                 str_ips.add(ip_str)
                 mac_str = ':'.join(x.encode('hex') for x in addr[1])
                 uc_packet = ARPSendPacket(mac_str, mac_sedr, ip_sedr, mac_sedr, ip_str, mac_str)
-                soc.send(uc_packet.__str__())
+                try:
+                    soc.send(uc_packet.__str__())
+                except OSError:
+                    return set(), ip_recvrs
             packets = recv_arp_packets(soc, socket.inet_aton(ip_sedr), str_ips, TIMEOUT)
             for packet in packets:
                 ip_from = packet[28:32]
@@ -278,6 +290,8 @@
         if device_id not in active_instances:
             continue
         ip_address = port["metric"].get("ip_address", "")
+        if len(ip_address.split('.')) != 4:
+            continue
 
         ns_ifs = namespaces_ifs[network_id]
         if len(ns_ifs) == 0:
@@ -310,7 +324,10 @@
     pool.join()
     for check in checks:
         id = check["id"]
-        passed, failed = check["result"].get()
+        try:
+            passed, failed = check["result"].get()
+        except IOError:
+            passed, failed = set(), check_map[id]
         for ip in passed:
             id_long = id + " " + ip
             res = mapping[id_long]
