diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-05-11 01:53:47 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-05-11 01:53:47 -0700 |
commit | 3b08917bf1fd332f3943387f5464e9c1ed43adaa (patch) | |
tree | adf723c72f7a889f6d9470db50e8921134dc2a9d /src | |
parent | 1ee5cc49107ae14a5ef6ca24c5da88b618b28e18 (diff) | |
parent | 8325729ce21818c9bee1650b26048e4ceec4e5d9 (diff) | |
download | scala-3b08917bf1fd332f3943387f5464e9c1ed43adaa.tar.gz scala-3b08917bf1fd332f3943387f5464e9c1ed43adaa.tar.bz2 scala-3b08917bf1fd332f3943387f5464e9c1ed43adaa.zip |
Merge pull request #2481 from martinmcnulty/socket-timeout
SI-5734 Allow setting of socket timeout for remote actors
Diffstat (limited to 'src')
-rw-r--r-- | src/actors/scala/actors/remote/TcpService.scala | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/actors/scala/actors/remote/TcpService.scala b/src/actors/scala/actors/remote/TcpService.scala index bde05fd816..028dd3a083 100644 --- a/src/actors/scala/actors/remote/TcpService.scala +++ b/src/actors/scala/actors/remote/TcpService.scala @@ -14,7 +14,7 @@ package remote import java.io.{DataInputStream, DataOutputStream, IOException} import java.lang.{Thread, SecurityException} -import java.net.{InetAddress, ServerSocket, Socket, UnknownHostException} +import java.net.{InetAddress, InetSocketAddress, ServerSocket, Socket, SocketTimeoutException, UnknownHostException} import scala.collection.mutable import scala.util.Random @@ -59,6 +59,23 @@ object TcpService { portnum } + private val connectTimeoutMillis = { + val propName = "scala.actors.tcpSocket.connectTimeoutMillis" + val defaultTimeoutMillis = 0 + sys.props get propName flatMap { + timeout => + try { + val to = timeout.toInt + Debug.info("Using socket timeout $to") + Some(to) + } catch { + case e: NumberFormatException => + Debug.warning(s"""Could not parse $propName = "$timeout" as an Int""") + None + } + } getOrElse defaultTimeoutMillis + } + var BufSize: Int = 65536 } @@ -176,7 +193,15 @@ class TcpService(port: Int, cl: ClassLoader) extends Thread with Service { } def connect(n: Node): TcpServiceWorker = synchronized { - val socket = new Socket(n.address, n.port) + val socket = new Socket() + val start = System.nanoTime + try { + socket.connect(new InetSocketAddress(n.address, n.port), TcpService.connectTimeoutMillis) + } catch { + case e: SocketTimeoutException => + Debug.warning(f"Timed out connecting to $n after ${(System.nanoTime - start) / math.pow(10, 9)}%.3f seconds") + throw e + } val worker = new TcpServiceWorker(this, socket) worker.sendNode(n) worker.start() |