diff --git a/src/drivers/Socket.py b/src/drivers/Socket.py index 19efe0d91..08619d15a 100644 --- a/src/drivers/Socket.py +++ b/src/drivers/Socket.py @@ -267,24 +267,28 @@ class SocketDriver(drivers.IrcDriver, drivers.ServersMixin): else: drivers.log.debug('Not resetting %s.', self.irc) server = self._getNextServer() + socks_proxy = getattr(conf.supybot.networks, self.irc.network) \ + .socksproxy() + resolver = None try: - address = utils.net.getAddressFromHostname(server[0], - attempt=self._attempt) - except socket.gaierror as e: - drivers.log.connectError(self.currentServer, e) - self.scheduleReconnect() - return + if socks_proxy: + import socks + except ImportError: + log.error('Cannot use socks proxy (SocksiPy not installed), ' + 'using direct connection instead.') + socks_proxy = '' + if socks_proxy: + address = server[0] + else: + try: + address = utils.net.getAddressFromHostname(server[0], + attempt=self._attempt) + except socket.gaierror as e: + drivers.log.connectError(self.currentServer, e) + self.scheduleReconnect() + return drivers.log.connect(self.currentServer) try: - socks_proxy = getattr(conf.supybot.networks, self.irc.network) \ - .socksproxy() - try: - if socks_proxy: - import socks - except ImportError: - log.error('Cannot use socks proxy (SocksiPy not installed), ' - 'using direct connection instead.') - socks_proxy = '' self.conn = utils.net.getSocket(address, socks_proxy) vhost = conf.supybot.protocols.irc.vhost() self.conn.bind((vhost, 0)) diff --git a/src/utils/net.py b/src/utils/net.py index f8361fe23..db1fcc558 100644 --- a/src/utils/net.py +++ b/src/utils/net.py @@ -92,13 +92,15 @@ def getSocket(host, socks_proxy=None): """Returns a socket of the correct AF_INET type (v4 or v6) in order to communicate with host. """ - addrinfo = socket.getaddrinfo(host, None) - host = addrinfo[0][4][0] + if not socks_proxy: + addrinfo = socket.getaddrinfo(host, None) + host = addrinfo[0][4][0] if socks_proxy: import socks s = socks.socksocket() hostname, port = socks_proxy.rsplit(':', 1) - s.setproxy(socks.PROXY_TYPE_SOCKS5, hostname, int(port)) + s.setproxy(socks.PROXY_TYPE_SOCKS5, hostname, int(port), + rdns=True) return s if isIPV4(host): return socket.socket(socket.AF_INET, socket.SOCK_STREAM)