support: greendns: always resolve port
Fixes https://bitbucket.org/eventlet/eventlet/issue/152
This commit is contained in:
@@ -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
13
tests/greendns_test.py
Normal 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'
|
Reference in New Issue
Block a user