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 <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2016-09-26 16:37:08 -04:00
parent 82d64e8ef4
commit 5f8fec8728
2 changed files with 11 additions and 6 deletions

View File

@ -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;

View File

@ -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;
}