Diff

net/server_epoll.lua @ 9473:5fdda751333a

net.server: Require IP address as argument to addclient (no DNS names) The net.connect API should be used to resolve DNS names first
author Kim Alvefur <zash@zash.se>
date Thu, 11 Oct 2018 15:48:30 +0200
parent 9445:af7eafe82447
child 9474:619ba78709a5
line wrap: on
line diff
--- a/net/server_epoll.lua	Thu Oct 11 14:18:38 2018 +0100
+++ b/net/server_epoll.lua	Thu Oct 11 15:48:30 2018 +0200
@@ -21,6 +21,8 @@
 local luasec = require "ssl";
 local gettime = require "util.time".now;
 local createtable = require "util.table".create;
+local inet = require "util.net";
+local inet_pton = inet.pton;
 local _SOCKETINVALID = socket._SOCKETINVALID or -1;
 
 local poll = require "util.poll".new();
@@ -614,7 +616,8 @@
 	if not client.peername then
 		client.peername, client.peerport = addr, port;
 	end
-	client:init();
+	local ok, err = client:init();
+	if not ok then return ok, err; end
 	if tls_ctx then
 		client:starttls(tls_ctx);
 	end
@@ -623,12 +626,20 @@
 
 -- New outgoing TCP connection
 local function addclient(addr, port, listeners, read_size, tls_ctx)
-	local conn, err = socket.tcp();
-	if not conn then return conn, err; end
+	local n = inet_pton(addr);
+	if not n then return nil, "invalid-ip"; end
+	local create
+	if #n == 16 then
+		create = socket.tcp6 or socket.tcp;
+	else
+		create = socket.tcp4 or socket.tcp;
+	end
+	local conn, err = create();
 	conn:settimeout(0);
 	conn:connect(addr, port);
 	local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx)
-	client:init();
+	local ok, err = client:init();
+	if not ok then return ok, err; end
 	if tls_ctx then
 		client:starttls(tls_ctx);
 	end