[prev in list] [next in list] [prev in thread] [next in thread] 

List:       unbound-users
Subject:    Re: libunbound: setting a deadline/timeout for ub_resolve
From:       Alex Zorin via Unbound-users <unbound-users () unbound ! net>
Date:       2018-06-08 7:58:11
Message-ID: 1528444691.1106451.1400696848.5C7C4475 () webmail ! messagingengine ! com
[Download RAW message or body]

Thanks Wouter, that very helpful.

On Fri, Jun 8, 2018, at 3:56 PM, W.C.A. Wijngaards via Unbound-users wrote:
> Hi Alex,
> 
> On 08/06/18 01:57, Alex Zorin via Unbound-users wrote:
> > Hello,
> > 
> > I'm using libunbound to perform iterative DNS lookups for a diagnostic service: \
> > github.com/letsdebug/letsdebug . 
> > One of the problems I have is when one or more of a domain's authoritative \
> > nameservers are timing out, ub_resolve takes an incredibly long time to give up, \
> > something like ~10 minutes when the ub_ctx is configured with these options:
> 
> If a timeout is needed, set a timeout.  So the code calling libunbound
> sets the timeout it wants.  And then cancels or ignores the return value
> of the lookup.
> 
> For example, use ub_resolve_async(), and then ub_fd(ctx) put that file
> descriptor in select or poll, with a timeout that you want to select or
> poll. So, sketching code that would look like this:
> ub_resolve_async(ctx, name, type, class, 0, funcwhendone, &async_id);
> struct pollfd fds[1];
> fds[0].fd = ub_fd(ctx);
> fds[0].events = POLLIN;
> fds[0].revents = 0;
> int r = poll(fds, 1, 180 * 1000);
> if(r == 0) /* timeout */
> else if(r == -1) /* poll has a system error */
> else ub_process(ctx); /* calls funcwhendone */
> 
> At timeout you could call ub_cancel(ctx, async_id) or just ignore the
> result when funcwhendone gets called (eventually).  Or delete the
> context, you say you only use it once, this also removes that callback.
> 
> Best regards, Wouter
> 
> > 
> > https://github.com/letsdebug/letsdebug/blob/e56f10a5741445645c44a6d6683b9f085f657999/dns_util.go#L84-L116
> >  
> > I've tried to grok the meaning of \
> > https://www.unbound.net/documentation/info_timeout.html but I'm not seeing the \
> > solution after some weeks of pondering the problem.. 
> > Ideally I would like to place a deadline of something like 180 seconds on the \
> > ub_resolve operation. I am using a fresh ub_ctx for each lookup, which is done to \
> > avoid sharing any resolver state between lookups. 
> > Do you have any further guidance on the ability to restrict ub_resolve's runtime?
> > 
> > Thanks!
> > Alex
> > 
> 
> 
> Email had 1 attachment:
> + signature.asc
> 1k (application/pgp-signature)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic