From 3e62f569478be0c6a43aed3a46ad9e192b309d6f Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 26 Oct 2012 15:04:01 +0400 Subject: [PATCH] =?UTF-8?q?Only=20Linux=20(Ubuntu)=20works=20as=20expected?= =?UTF-8?q?=20=E2=80=94=20if=20we=20bind=20to=20anyLocalAddress,=20any=20a?= =?UTF-8?q?ttempt=20bind=20to=20127.0.0.1=20will=20be=20failed.=20So,=20no?= =?UTF-8?q?w,=20we=20check=20OS=20and=20don't=20bind=20to=20127.0.0.1=20in?= =?UTF-8?q?=20this=20case.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, new property will be available in next 122/121 builds — "rpc.onlyAnyHost". It is relevant only for LiveEdit/JS Debugger (our chrome extension connects to default port) — help us to investigate some situations. --- .../platform-impl/src/org/jetbrains/io/WebServer.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/org/jetbrains/io/WebServer.java b/platform/platform-impl/src/org/jetbrains/io/WebServer.java index c9cd0e547393..8d5184d44815 100644 --- a/platform/platform-impl/src/org/jetbrains/io/WebServer.java +++ b/platform/platform-impl/src/org/jetbrains/io/WebServer.java @@ -13,6 +13,7 @@ import org.jboss.netty.channel.group.ChannelGroup; import org.jboss.netty.channel.group.DefaultChannelGroup; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.handler.codec.http.*; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import java.net.InetAddress; @@ -32,6 +33,9 @@ public class WebServer { private static final Logger LOG = Logger.getInstance(WebServer.class); + @NonNls + private static final String PROPERTY_ONLY_ANY_HOST = "rpc.onlyAnyHost"; + public WebServer() { final Application application = ApplicationManager.getApplication(); final Executor pooledThreadExecutor = new Executor() { @@ -74,11 +78,13 @@ public class WebServer { // but if we bind only to any local port (0.0.0.0), instance of idea <121 can bind to our ports and any request to us will be intercepted // so, we bind to 127.0.0.1 and 0.0.0.0 private int bind(int firstPort, int portsCount, boolean tryAnyPort, ServerBootstrap bootstrap) { + String property = System.getProperty(PROPERTY_ONLY_ANY_HOST); + boolean onlyAnyHost = property == null ? SystemInfo.isLinux : (property.isEmpty() || Boolean.valueOf(property)); for (int i = 0; i < portsCount; i++) { int port = firstPort + i; try { openChannels.add(bootstrap.bind(new InetSocketAddress(port))); - if (!SystemInfo.isLinux) { + if (!onlyAnyHost) { openChannels.add(bootstrap.bind(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), port))); } return port;