aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/org/connectbot/transport/Telnet.java19
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;