Giter VIP home page Giter VIP logo

Comments (4)

kelunik avatar kelunik commented on August 25, 2024

@ShiSHcat Can you reproduce this issue? Which DNS server are you using?

from dns.

ShiSHcat avatar ShiSHcat commented on August 25, 2024

I'm not having this problem anymore.

from dns.

kelunik avatar kelunik commented on August 25, 2024

Thanks for reporting back!

from dns.

karelvasicek avatar karelvasicek commented on August 25, 2024

I had exactly the same problem (for different domain, of course). The problem was caused by:

  • "not accessible" nameserver defined (as first server) in /etc/resolv.conf. There was some problems with DNS cache (the actual server was accessible, but somewhat refused connections) what resulted in following output (the output was shown immediately, so there was no timeout)
    host www.google.com nonworking.dns.server.ip
    ;; communications error to nonworking.dns.server.ip#53: connection refused
    ;; communications error to nonworking.dns.server.ip#53: connection refused
    ;; no servers could be reached
    
  • under "standard" circumstances, connection to the nameserver times out ((the output was shown incrementally with considerable delay between each attempt)
    host www.google.com nonworking.dns.server.ip
    ;; communications error to nonworking.dns.server.ip#53: timed out
    ;; communications error to nonworking.dns.server.ip#53: timed out
    ;; no servers could be reached
    
  • so the connection seems to be considered established and it does not timeout at
    } catch (Amp\TimeoutException $exception) {
  • $response = yield $socket->ask($question, $this->config->getTimeout());
    throws UnexpectedValueException ('Decode error: Incomplete packet (tried to read 12 bytes from index 0') that is received from vendor/daverandom/libdns/src/Decoder/Decoder.php:121 and is converted to DnsException by
    $this->error($exception);
  • it seems to start working by replacing $response = yield $socket->ask($question, $this->config->getTimeout()); with following code, but I'm totally unsure if it's correct or not especially considering my poor library and async-logic knowledge - f.ex. if another unintended DnsException isn't newly caught, how the socket should be closed etc. In addition, potential infinite loop (when all servers are not accessible) must be secured. Thus I'm not creating PR, it's just a concept how the issue could be fixed.
                      try {
                          /** @var Message $response */
                          $response = yield $socket->ask($question, $this->config->getTimeout());
                      } catch (DnsException $e) {
                          if ($protocol === "udp") {
                              Loop::defer(function () use ($socket, $uri) {
                                  unset($this->sockets[$uri]);
                                  $socket->close();
                              });
    
                              $uri = $protocol . "://" . $nameservers[++$attempt % $nameserversCount];
                              $socket = yield $this->getSocket($uri);
    
                              continue;
                          }
                      }
    

from dns.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.