diff --git a/src/ipset.c b/src/ipset.c index c16cc85..a34ed96 100644 --- a/src/ipset.c +++ b/src/ipset.c @@ -97,7 +97,8 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr, struct nlattr *nested[2]; uint8_t proto; int addrsz = INADDRSZ; - + ssize_t rc; + #ifdef HAVE_IPV6 if (af == AF_INET6) addrsz = IN6ADDRSZ; @@ -137,10 +138,9 @@ static int new_add_to_ipset(const char *setname, const struct all_addr *ipaddr, nested[1]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[1]; nested[0]->nla_len = (void *)buffer + NL_ALIGN(nlh->nlmsg_len) - (void *)nested[0]; - if (sendto(ipset_sock, buffer, nlh->nlmsg_len, 0, (struct sockaddr *)&snl, sizeof(snl)) < 0) - return -1; - - return 0; + while ((rc = sendto(ipset_sock, buffer, nlh->nlmsg_len, 0, + (struct sockaddr *)&snl, sizeof(snl))) == -1 && retry_send()); + return rc; }