Catch address resolution failure exceptions

This commit is contained in:
Neil Booth 2017-04-01 22:55:16 +09:00
parent 321315ace0
commit 81e6577838

View File

@ -10,11 +10,11 @@
import ast import ast
import asyncio import asyncio
import random import random
import socket
import ssl import ssl
import time import time
from collections import defaultdict, Counter from collections import defaultdict, Counter
from functools import partial from functools import partial
from socket import SOCK_STREAM
from lib.jsonrpc import JSONSession from lib.jsonrpc import JSONSession
from lib.peer import Peer from lib.peer import Peer
@ -337,9 +337,15 @@ class PeerManager(util.LoggedClass):
permit = self.permit_new_onion_peer() permit = self.permit_new_onion_peer()
reason = 'rate limiting' reason = 'rate limiting'
else: else:
infos = await self.loop.getaddrinfo(host, 80, type=SOCK_STREAM) try:
permit = any(source == info[-1][0] for info in infos) infos = await self.loop.getaddrinfo(host, 80,
reason = 'source-destination mismatch' type=socket.SOCK_STREAM)
except socket.gaierror:
permit = False
reason = 'address resolution failure'
else:
permit = any(source == info[-1][0] for info in infos)
reason = 'source-destination mismatch'
if permit: if permit:
self.log_info('accepted add_peer request from {} for {}' self.log_info('accepted add_peer request from {} for {}'