Diff

net/server_epoll.lua @ 7554:c2decf88e249

net.server_epoll: Use first writable event to signal onconnect
author Kim Alvefur <zash@zash.se>
date Wed, 10 Aug 2016 20:59:54 +0200
parent 7553:4f3e4a092348
child 7555:f3abb5f891eb
line wrap: on
line diff
--- a/net/server_epoll.lua	Wed Aug 10 20:57:05 2016 +0200
+++ b/net/server_epoll.lua	Wed Aug 10 20:59:54 2016 +0200
@@ -374,6 +374,7 @@
 		created = gettime();
 		listeners = listeners;
 		_pattern = pattern or server._pattern;
+		onwriteable = interface.onconnect;
 		writebuffer = {};
 		tls = tls;
 	}, interface_mt);
@@ -397,8 +398,7 @@
 		client._tls = false;
 		client:starttls();
 	else
-		self.listeners.onconnect(client);
-		client:setflags(true);
+		client:setflags(false, true);
 	end
 	client:setreadtimeout();
 end
@@ -419,9 +419,10 @@
 end
 
 function interface:onconnect()
-	self.onreadable = nil;
 	self.onwriteable = nil;
 	self.listeners.onconnect(self);
+	self:setflags(true);
+	return self:onwriteable();
 end
 
 local function addserver(addr, port, listeners, pattern, tls)
@@ -451,7 +452,6 @@
 		_pattern = pattern;
 		writebuffer = {};
 		tls = tls;
-		onreadable = interface.onconnect;
 		onwriteable = interface.onconnect;
 		peer = { addr, port };
 	}, interface_mt);