Ответ 1
Это ошибка и будет исправлена как можно скорее.
Как обходной путь, передайте аргумент source = '' в dns.resolver.query.
tcp = True не требуется.
Я пытаюсь использовать поддержку нового сокета для Google App Engine для выполнения некоторых DNS-запросов. Я использую dnspython для выполнения запроса, и код отлично работает вне GAE.
Код следующий:
class DnsQuery(webapp2.RequestHandler):
def get(self):
domain = self.request.get('domain')
logging.info("Test Query for "+domain)
answers = dns.resolver.query(domain, 'TXT', tcp=True)
logging.info("DNS OK")
for rdata in answers:
rc = str(rdata.exchange).lower()
logging.info("Record "+rc)
Когда я запускаю в GAE, я получаю следующую ошибку:
File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 37, in post
return self.get()
File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 41, in get
answers = dns.resolver.query(domain, 'TXT', tcp=True)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 976, in query
raise_on_no_answer, source_port)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 821, in query
timeout = self._compute_timeout(start)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 735, in _compute_timeout
raise Timeout
Что вызвано dnspython, когда ответ не возвращается в течение срока. Я повысил timelimit до 60 секунд, а DnsQuery - задача, но все равно получаю ту же ошибку.
Есть ли какое-либо ограничение в реализации сокета приложений Google App Engine, которое предотвращает выполнение запросов DNS?
Это ошибка и будет исправлена как можно скорее.
Как обходной путь, передайте аргумент source = '' в dns.resolver.query.
tcp = True не требуется.
Нет. На UDP-портах нет ограничений. (только порты smtp на TCP).
Возможно, возникла проблема с маршрутизацией службы сокетов. Пожалуйста, зарегистрируйте проблему с отслеживателем проблем с движком приложения. https://code.google.com/p/googleappengine/issues/list
dnspython использует socket
. Однако сокет доступен только в платных приложениях. 1