support: greendns: always resolve port

Fixes https://bitbucket.org/eventlet/eventlet/issue/152
This commit is contained in:
Sergey Shepelev
2013-07-09 18:45:44 +04:00
parent 4fc1f4550d
commit c268aa501e
2 changed files with 20 additions and 6 deletions

View File

@@ -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.

13
tests/greendns_test.py Normal file
View File

@@ -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'