diff --git a/res/values/strings.xml b/res/values/strings.xml
index a68b9c9..cbda608 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -187,6 +187,10 @@
Message filter help
Online reference for APRS-IS filters
+TCP socket timeout
+Time before resetting the connection
+Timeout value in seconds (0 = disable)
+
translator-credits
diff --git a/res/xml/pref_tcp.xml b/res/xml/pref_tcp.xml
index f5b8546..3d4eafe 100644
--- a/res/xml/pref_tcp.xml
+++ b/res/xml/pref_tcp.xml
@@ -36,6 +36,14 @@
+
+
diff --git a/src/backend/TcpUploader.scala b/src/backend/TcpUploader.scala
index fe002c5..0926ec6 100644
--- a/src/backend/TcpUploader.scala
+++ b/src/backend/TcpUploader.scala
@@ -9,6 +9,7 @@ import _root_.java.net.{InetAddress, Socket}
class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUploader(prefs) {
val TAG = "TcpUploader"
val hostname = prefs.getString("tcp.server", "euro.aprs2.net")
+ val so_timeout = prefs.getStringInt("tcp.sotimeout", 120)
var conn : TcpSocketThread = null
createConnection()
@@ -59,6 +60,7 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUpl
this.synchronized {
socket = new Socket(host, port)
socket.setKeepAlive(true)
+ socket.setSoTimeout(so_timeout*1000)
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()), 256)
writer = new PrintWriter(new OutputStreamWriter(
@@ -93,6 +95,10 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUpl
init_socket()
}
} catch {
+ case se : java.net.SocketTimeoutException =>
+ Log.i(TAG, "restarting due to timeout")
+ shutdown()
+ init_socket()
case e : Exception => Log.d(TAG, "Exception " + e)
}
}