1/*  Title:      Pure/System/system_channel.scala
2    Author:     Makarius
3
4Socket-based system channel for inter-process communication.
5*/
6
7package isabelle
8
9
10import java.io.{InputStream, OutputStream}
11import java.net.{ServerSocket, InetAddress}
12
13
14object System_Channel
15{
16  def apply(): System_Channel = new System_Channel
17}
18
19class System_Channel private
20{
21  private val server = new ServerSocket(0, 50, InetAddress.getByName("127.0.0.1"))
22
23  val server_name: String = "127.0.0.1:" + server.getLocalPort
24  override def toString: String = server_name
25
26  def rendezvous(): (OutputStream, InputStream) =
27  {
28    val socket = server.accept
29    socket.setTcpNoDelay(true)
30    (socket.getOutputStream, socket.getInputStream)
31  }
32
33  def accepted() { server.close }
34}
35