[Dnsmasq-discuss] [Babel-users] Looping in EAGAIN

Dave Taht dave.taht at gmail.com
Fri Mar 27 02:55:28 GMT 2015


I see this patch for EAGAIN on an interface going away did not make the
babel-ss-merge branch apparently.  (for those new to this bug, see:
http://lists.alioth.debian.org/pipermail/babel-users/2014-October/001777.html
for more details. )

No, I haven't had time to test this patch, nor have I come up with a better
idea.

I am curious if there could be some other *more robust* means of detecting
when an interface has gone away, and/or how dnsmasq was coping with this
situation nowadays.

(I'd mentioned this problem on the endless homenet thread

http://www.ietf.org/mail-archive/web/homenet/current/msg05156.html

and, thought I'd check to see if it was mainlined!)

I certainly hate any possibility anywhere in routing code where a
possibility for infinite loop existed. are there any checkers for such
loops in the world?

On Wed, Oct 15, 2014 at 2:00 PM, Juliusz Chroboczek <
jch at pps.univ-paris-diderot.fr> wrote:
> Dave,
>
> I'm not going to have time to test this for a while.  In the meantime,
> here's a proposed patch, please let me know if you find the time to test
> it.
>have
> -- Juliusz
>
> diff --git a/net.c b/net.c
> index 6f9728f..9b0b738 100644
> --- a/net.c
> +++ b/net.c
> @@ -141,7 +141,7 @@ babel_send(int s,
>  {
>      struct iovec iovec[2];
>      struct msghdr msg;
> -    int rc;
> +    int rc, count = 0;
>
>      iovec[0].iov_base = (void*)buf1;
>      iovec[0].iov_len = buflen1;
> @@ -156,13 +156,18 @@ babel_send(int s,
>   again:
>      rc = sendmsg(s, &msg, 0);
>      if(rc < 0) {
> -        if(errno == EINTR)
> -            goto again;
> -        else if(errno == EAGAIN) {
> +        if(errno == EINTR) {
> +            count++;
> +            if(count < 1000)
> +                goto again;
> +        } else if(errno == EAGAIN) {
>              int rc2;
>              rc2 = wait_for_fd(1, s, 5);
> -            if(rc2 > 0)
> -                goto again;
> +            if(rc2 > 0) {
> +                count++;
> +                if(count < 1000)
> +                    goto again;
> +            }
>              errno = EAGAIN;
>          }
>      }



-- 
Dave Täht
Let's make wifi fast, less jittery and reliable again!

https://plus.google.com/u/0/107942175615993706558/posts/TVX3o84jjmb
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/attachments/20150326/109bb04b/attachment.html>


More information about the Dnsmasq-discuss mailing list