From d45b0bdb001c1b6240d90e13ae2dab9e12484f73 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 21 May 2009 18:04:09 +0000 Subject: [PATCH] Added an option to bind the datagram socket to a specific hostname, in hopes of fixing the issue with receiving datagrams from the staging server. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5793 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../presents/server/PresentsServer.java | 13 +++++++++++-- .../presents/server/net/ConnectionManager.java | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/java/com/threerings/presents/server/PresentsServer.java b/src/java/com/threerings/presents/server/PresentsServer.java index eb4938c24..a49df79f5 100644 --- a/src/java/com/threerings/presents/server/PresentsServer.java +++ b/src/java/com/threerings/presents/server/PresentsServer.java @@ -154,11 +154,11 @@ public class PresentsServer _clmgr.setInjector(injector); // configure our connection manager - _conmgr.init(getListenPorts(), getDatagramPorts()); + _conmgr.init(getListenPorts(), getDatagramPorts(), getDatagramHostname()); // initialize the time base services TimeBaseProvider.init(_invmgr, _omgr); - + // Make the client manager shut down before the invoker and dobj threads. This will help // application code to avoid long chains of shutdown constraints (e.g. msoy bureau manager). _shutmgr.addConstraint( @@ -207,6 +207,15 @@ public class PresentsServer return Client.DEFAULT_DATAGRAM_PORTS; } + /** + * Returns the hostname for which the connection manager will listen for datagrams, or + * null to bind to the wildcard address. + */ + protected String getDatagramHostname () + { + return null; + } + /** * Called once the invoker and distributed object manager have both completed processing all * remaining events and are fully shutdown. Note: this is called as the last act of diff --git a/src/java/com/threerings/presents/server/net/ConnectionManager.java b/src/java/com/threerings/presents/server/net/ConnectionManager.java index 08a39d71c..8e45c32f5 100644 --- a/src/java/com/threerings/presents/server/net/ConnectionManager.java +++ b/src/java/com/threerings/presents/server/net/ConnectionManager.java @@ -109,9 +109,20 @@ public class ConnectionManager extends LoopingThread */ public void init (int[] ports, int[] datagramPorts) throws IOException + { + init(ports, datagramPorts, null); + } + + /** + * Constructs and initialized a connection manager (binding socket on which it will listen for + * client connections to each of the specified ports). + */ + public void init (int[] ports, int[] datagramPorts, String datagramHostname) + throws IOException { _ports = ports; _datagramPorts = datagramPorts; + _datagramHostname = datagramHostname; _selector = SelectorProvider.provider().openSelector(); // create our stats record @@ -390,7 +401,8 @@ public class ConnectionManager extends LoopingThread _datagramChannel = DatagramChannel.open(); _datagramChannel.configureBlocking(false); - InetSocketAddress isa = new InetSocketAddress(port); + InetSocketAddress isa = (_datagramHostname == null) ? + new InetSocketAddress(port) : new InetSocketAddress(_datagramHostname, port); _datagramChannel.socket().bind(isa); registerChannel(_datagramChannel); log.info("Server accepting datagrams on " + isa + "."); @@ -1169,6 +1181,7 @@ public class ConnectionManager extends LoopingThread @Inject(optional=true) protected Authenticator _author = new DummyAuthenticator(); protected int[] _ports, _datagramPorts; + protected String _datagramHostname; protected Selector _selector; protected ServerSocketChannel _ssocket; protected DatagramChannel _datagramChannel;