udp_send_fec(): Treat ECONNREFUSED like EAGAIN.
authorAndre Noll <maan@systemlinux.org>
Tue, 6 Apr 2010 17:32:32 +0000 (19:32 +0200)
committerAndre Noll <maan@systemlinux.org>
Tue, 6 Apr 2010 17:37:09 +0000 (19:37 +0200)
Writes to udp sockets may return ECONNREFUSED. As this is often only
a temporary condition, there is no need to kick the target.

This patch makes the udp sender ignore such errors rather than kicking
the client from the udp target list on the first error.

Thanks to Gerrit Renker for suggesting this change.

udp_send.c

index efe80b6..533af63 100644 (file)
@@ -237,6 +237,8 @@ static int udp_send_fec(char *buf, size_t len, void *private_data)
        if (ret < 0)
                goto fail;
        ret = send_queued_chunks(ut->fd, ut->cq, 0);
+       if (ret == -ERRNO_TO_PARA_ERROR(ECONNREFUSED))
+               ret = 0;
        if (ret < 0)
                goto fail;
        if (!len)
@@ -247,6 +249,8 @@ static int udp_send_fec(char *buf, size_t len, void *private_data)
                        goto fail;
        }
        ret = write_nonblock(ut->fd, buf, len, 0);
+       if (ret == -ERRNO_TO_PARA_ERROR(ECONNREFUSED))
+               ret = 0;
        if (ret < 0)
                goto fail;
        if (ret != len) {