From: Donald Sharp Date: Mon, 26 Sep 2016 20:37:08 +0000 (-0400) Subject: lib, pimd: Modify writen to retry on certain failures X-Git-Tag: frr-3.0-branchpoint~64^2~10^2~198 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5f8fec87289fbac9e0b1ece4c088bd7f305f8be9;p=mirror%2Ffrr.git lib, pimd: Modify writen to retry on certain failures When writen fails, allow itto retry on certain failures until it succeeds. Ticket: CM-12986 Signed-off-by: Donald Sharp --- diff --git a/lib/network.c b/lib/network.c index 506e019136..2b6f2fbab5 100644 --- a/lib/network.c +++ b/lib/network.c @@ -62,8 +62,13 @@ writen(int fd, const u_char *ptr, int nbytes) while (nleft > 0) { nwritten = write(fd, ptr, nleft); - - if (nwritten <= 0) + + if (nwritten < 0) + { + if (!ERRNO_IO_RETRY(errno)) + return nwritten; + } + if (nwritten == 0) return (nwritten); nleft -= nwritten; diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c index bee9c63e96..01e8ee0e5f 100644 --- a/pimd/pim_zlookup.c +++ b/pimd/pim_zlookup.c @@ -307,8 +307,8 @@ zclient_lookup_nexthop_once (struct pim_zlookup_nexthop nexthop_tab[], ret = writen(zlookup->sock, s->data, stream_get_endp(s)); if (ret < 0) { - zlog_err("%s %s: writen() failure writing to zclient lookup socket", - __FILE__, __PRETTY_FUNCTION__); + zlog_err("%s %s: writen() failure: %d writing to zclient lookup socket", + __FILE__, __PRETTY_FUNCTION__, errno); zclient_lookup_failed(zlookup); return -2; } @@ -461,8 +461,8 @@ pim_zlookup_sg_statistics (struct channel_oil *c_oil) ret = writen (zlookup->sock, s->data, count); if (ret <= 0) { - zlog_err("%s %s: writen() failure writing to zclient lookup socket", - __FILE__, __PRETTY_FUNCTION__); + zlog_err("%s %s: writen() failure: %d writing to zclient lookup socket", + __FILE__, __PRETTY_FUNCTION__, errno); return -1; }