From c268aa501e0d59e052bf10daa1f36a189337d0a6 Mon Sep 17 00:00:00 2001 From: Sergey Shepelev Date: Tue, 9 Jul 2013 18:45:44 +0400 Subject: [PATCH] support: greendns: always resolve port Fixes https://bitbucket.org/eventlet/eventlet/issue/152 --- eventlet/support/greendns.py | 13 +++++++------ tests/greendns_test.py | 13 +++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 tests/greendns_test.py diff --git a/eventlet/support/greendns.py b/eventlet/support/greendns.py index 8720f7d..2c915c6 100644 --- a/eventlet/support/greendns.py +++ b/eventlet/support/greendns.py @@ -40,13 +40,13 @@ from eventlet.green import _socket_nodns from eventlet.green import time from eventlet.green import select -dns = patcher.import_patched('dns', +dns = patcher.import_patched('dns', socket=_socket_nodns, time=time, select=select) -for pkg in ('dns.query', 'dns.exception', 'dns.inet', 'dns.message', +for pkg in ('dns.query', 'dns.exception', 'dns.inet', 'dns.message', 'dns.rdatatype','dns.resolver', 'dns.reversename'): - setattr(dns, pkg.split('.')[1], patcher.import_patched(pkg, + setattr(dns, pkg.split('.')[1], patcher.import_patched(pkg, socket=_socket_nodns, time=time, select=select)) @@ -252,12 +252,13 @@ def getnameinfo(sockaddr, flags): raise socket.gaierror( (socket.EAI_NODATA, 'No address associated with hostname')) - if not (flags & socket.NI_NUMERICSERV): - proto = (flags & socket.NI_DGRAM) and 'udp' or 'tcp' - port = socket.getservbyport(port, proto) + if not (flags & socket.NI_NUMERICSERV): + proto = (flags & socket.NI_DGRAM) and 'udp' or 'tcp' + port = socket.getservbyport(port, proto) return (host, port) + def is_ipv4_addr(host): """is_ipv4_addr returns true if host is a valid IPv4 address in dotted quad notation. diff --git a/tests/greendns_test.py b/tests/greendns_test.py new file mode 100644 index 0000000..7a64b1e --- /dev/null +++ b/tests/greendns_test.py @@ -0,0 +1,13 @@ +from nose.plugins.skip import SkipTest + + +def test_greendns_getnameinfo_resolve_port(): + try: + from eventlet.support import greendns + except ImportError: + raise SkipTest('greendns requires package dnspython') + + # https://bitbucket.org/eventlet/eventlet/issue/152 + _, port1 = greendns.getnameinfo(('127.0.0.1', 80), 0) + _, port2 = greendns.getnameinfo(('localhost', 80), 0) + assert port1 == port2 == 'http'