X-Git-Url: http://git.megacz.com/?p=org.ibex.jinetd.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjinetd%2FPort.java;h=470c0a0305baf05d893f6b283ec0dee348caad79;hp=d7f850d42f191506841b8d9b2d6393c5e4cd403f;hb=792b114e78d5d2a23498fb8b784b404f89c4106a;hpb=99f8fd894be14226a64f1889657edf863edf8afb diff --git a/src/org/ibex/jinetd/Port.java b/src/org/ibex/jinetd/Port.java index d7f850d..470c0a0 100644 --- a/src/org/ibex/jinetd/Port.java +++ b/src/org/ibex/jinetd/Port.java @@ -8,16 +8,24 @@ import java.util.zip.*; public class Port extends Loader { - private final InetAddress bindTo; - private final int port; - private final Thread listener; + final InetAddress bindTo; + final int port; - public Port(String path, InetAddress bindTo, int port) { + private static Hash cache = new Hash(); + public static Port newPort(String path, InetAddress bindTo, int port) throws IOException { + String canonical = new File(path).getCanonicalPath(); + Port p = (Port)cache.get(canonical); + if (p == null) cache.put(canonical, p = new Port(path, bindTo, port)); + else Log.warn(Port.class, " sharing " + bindTo+":"+port+" -> "+ (p.bindTo+":"+p.port)); + p.spawn(bindTo, port); + return p; + } + + void spawn(InetAddress bindTo, int port) { new PortThread(bindTo, port).start(); } + private Port(String path, InetAddress bindTo, int port) { super(path); this.bindTo = bindTo; this.port = port; - this.listener = new PortThread(); - listener.start(); } public void changed(Watched w) { @@ -90,6 +98,9 @@ public class Port extends Loader { } private class PortThread extends Thread { + InetAddress bindTo; + int port; + public PortThread(InetAddress bindTo, int port) { this.bindTo = bindTo; this.port = port; } public void run() { try { Log.warn(this, "Now listening on address " + (bindTo == null ? "all interfaces" : bindTo.toString()) +