From 2a5da18f20aaacdf41cb94f5b73867cfbf43d852 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 12 Apr 2011 01:23:53 +0000 Subject: [PATCH] Allow customizing the ServerSocketChannelAcceptor to configure the socket differently (specifically, we want to enable SO_REUSEADDR in Spiral Knights). git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6625 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../nio/conman/ServerSocketChannelAcceptor.java | 12 +++++++++++- .../threerings/presents/server/PresentsServer.java | 9 ++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/threerings/nio/conman/ServerSocketChannelAcceptor.java b/src/main/java/com/threerings/nio/conman/ServerSocketChannelAcceptor.java index 3536edafc..d25989137 100644 --- a/src/main/java/com/threerings/nio/conman/ServerSocketChannelAcceptor.java +++ b/src/main/java/com/threerings/nio/conman/ServerSocketChannelAcceptor.java @@ -99,7 +99,7 @@ public class ServerSocketChannelAcceptor { // create a listening socket final ServerSocketChannel ssocket = ServerSocketChannel.open(); - ssocket.configureBlocking(false); + configureSocket(ssocket); InetSocketAddress isa = AddressUtil.getAddress(_bindHostname, port); ssocket.socket().bind(isa); @@ -125,6 +125,16 @@ public class ServerSocketChannelAcceptor log.info("Server listening on " + isa + "."); } + /** + * Override to perform any desired additional socket configuration before binding. Be sure to + * call the superclass implementation. + */ + protected void configureSocket (ServerSocketChannel ssocket) + throws IOException + { + ssocket.configureBlocking(false); + } + protected final int[] _ports; protected final String _bindHostname; protected final ConnectionManager _conMan; diff --git a/src/main/java/com/threerings/presents/server/PresentsServer.java b/src/main/java/com/threerings/presents/server/PresentsServer.java index 0b4aa300a..1a9831d41 100644 --- a/src/main/java/com/threerings/presents/server/PresentsServer.java +++ b/src/main/java/com/threerings/presents/server/PresentsServer.java @@ -191,9 +191,7 @@ public class PresentsServer _clmgr.setInjector(injector); // Create our socket opening objects now that we know what ports we're using. - _socketAcceptor = - new ServerSocketChannelAcceptor(getBindHostname(), getListenPorts(), _conmgr); - _lifecycle.addComponent(_socketAcceptor); + _lifecycle.addComponent(_socketAcceptor = createSocketAcceptor()); _datagramReader = new DatagramChannelReader(getDatagramHostname(), getDatagramPorts(), _conmgr); _lifecycle.addComponent(_datagramReader); @@ -220,6 +218,11 @@ public class PresentsServer } } + protected ServerSocketChannelAcceptor createSocketAcceptor () + { + return new ServerSocketChannelAcceptor(getBindHostname(), getListenPorts(), _conmgr); + } + /** * Starts up all of the server services and enters the main server event loop. */