changeset 1175:d6d0bd05ad8c

exit on bind conflict, serve "127.0.0.1" for serve_for_nginx
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 12 Feb 2018 14:55:28 -0700
parents bdf27aa2a65c
children 79b1e9ffd0c0
files src/luan/cmd_line.luan src/luan/modules/http/Server.luan src/luan/webserver/Server.java
diffstat 3 files changed, 30 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
diff -r bdf27aa2a65c -r d6d0bd05ad8c src/luan/cmd_line.luan
--- a/src/luan/cmd_line.luan	Sun Feb 11 17:13:40 2018 -0700
+++ b/src/luan/cmd_line.luan	Mon Feb 12 14:55:28 2018 -0700
@@ -22,10 +22,10 @@
 		function()
 			local main_file = load_file(file)
 			print( main_file( Table.unpack(Luan.arg) ) )
-		end;
+		end
 		catch = function(e)
 --			java(); e.java.printStackTrace();
 			Io.print_to(Io.stderr, e )
-		end;
+		end
 	}
 end
diff -r bdf27aa2a65c -r d6d0bd05ad8c src/luan/modules/http/Server.luan
--- a/src/luan/modules/http/Server.luan	Sun Feb 11 17:13:40 2018 -0700
+++ b/src/luan/modules/http/Server.luan	Mon Feb 12 14:55:28 2018 -0700
@@ -4,6 +4,7 @@
 local gsub = String.gsub or error()
 local match = String.match or error()
 local matches = String.matches or error()
+local try = Luan.try or error()
 local Io = require "luan:Io.luan"
 local Package = require "luan:Package.luan"
 local Rpc = require "luan:Rpc.luan"
@@ -24,6 +25,7 @@
 local ListHandler = require "java:luan.webserver.handlers.ListHandler"
 local LuanHandler = require "java:luan.modules.http.LuanHandler"
 local NotFound = require "java:luan.modules.http.NotFound"
+local System = require "java:java.lang.System"
 
 
 local Server = {}
@@ -47,14 +49,22 @@
 	return dir_path
 end
 
-local function start(handler)
+local function start()
+	try {
+		function()
+			LuanHandler.start(Server.server)
+		end
+		catch = function(e)
+--			e.java.printStackTrace();
+			Io.print_to(Io.stderr, e )
+			System.exit(-1)
+		end
+	}
+
 	function Rpc.functions.call(domain,fn_name,...)
 		return Server.luan_handler.call_rpc(fn_name,...)
 	end
 	Thread.fork(Rpc.serve)
-
-	Server.server = JavaServer.new(Server.port,handler)
-	LuanHandler.start(Server.server)
 end
 
 function Server.serve(dir)
@@ -69,7 +79,8 @@
 	handler = ContentTypeHandler.new(handler)
 	handler = SafeHandler.new(handler)
 	handler = LogHandler.new(handler)
-	start(handler)
+	Server.server = JavaServer.new(Server.port,handler)
+	start()
 end
 
 function Server.serve_for_nginx(dir)
@@ -82,7 +93,8 @@
 	handler = ContentTypeHandler.new(handler)
 	handler = SafeHandler.new(handler)
 	handler = LogHandler.new(handler)
-	start(handler)
+	Server.server = JavaServer.Local.new(Server.port,handler)
+	start()
 end
 
 return Server
diff -r bdf27aa2a65c -r d6d0bd05ad8c src/luan/webserver/Server.java
--- a/src/luan/webserver/Server.java	Sun Feb 11 17:13:40 2018 -0700
+++ b/src/luan/webserver/Server.java	Mon Feb 12 14:55:28 2018 -0700
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.net.Socket;
 import java.net.ServerSocket;
+import java.net.InetAddress;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
@@ -57,4 +58,13 @@
 		}
 	}
 
+	public static class Local extends Server {
+		public Local(int port,Handler handler) {
+			super(port,handler);
+		}
+
+		protected ServerSocket newServerSocket() throws IOException {
+			return new ServerSocket(port,0,InetAddress.getByName("127.0.0.1"));
+		}
+	}
 }