diff options
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/org/connectbot/transport/Telnet.java | 19 |
2 files changed, 20 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 06e089d..0c563ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,8 +16,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - More context is given for failures to connect via SSH which should reveal why a host might be incompatible with ConnectBot. - SSH key exchange algorithm will now be printed upon connection. -- SSH: all addresses for a particular host will be tried when - connecting. This includes IPv6. +- All addresses for a particular host will be tried when connecting + (including IPv6). ## [1.8.3][1.8.3] - 2014-04-02 ### Fixed diff --git a/src/org/connectbot/transport/Telnet.java b/src/org/connectbot/transport/Telnet.java index 16cbd0e..ed8fc95 100644 --- a/src/org/connectbot/transport/Telnet.java +++ b/src/org/connectbot/transport/Telnet.java @@ -20,8 +20,11 @@ package org.connectbot.transport; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; +import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.nio.charset.Charset; import java.util.Map; @@ -123,10 +126,24 @@ public class Telnet extends AbsTransport { return PROTOCOL; } + private static void tryAllAddresses(Socket sock, String host, int port) throws IOException { + InetAddress[] addresses = InetAddress.getAllByName(host); + for (InetAddress addr : addresses) { + try { + sock.connect(new InetSocketAddress(addr, port)); + return; + } catch (SocketTimeoutException e) { + } + } + throw new SocketTimeoutException("Could not connect; socket timed out"); + } + @Override public void connect() { try { - socket = new Socket(host.getHostname(), host.getPort()); + socket = new Socket(); + + tryAllAddresses(socket, host.getHostname(), host.getPort()); connected = true; |