Diff

net/server_epoll.lua @ 7584:98ee3ed105cf

net.server_epoll: Collect and expose local and remote address and ports
author Kim Alvefur <zash@zash.se>
date Thu, 18 Aug 2016 15:55:50 +0200
parent 7583:0498daffa6f0
child 7585:b64218c816de
line wrap: on
line diff
--- a/net/server_epoll.lua	Thu Aug 18 15:50:18 2016 +0200
+++ b/net/server_epoll.lua	Thu Aug 18 15:55:50 2016 +0200
@@ -114,11 +114,11 @@
 local interface_mt = { __index = interface };
 
 function interface_mt:__tostring()
-	if self.peer then
+	if self.peername then
 		if self.conn then
 			return ("%d %s [%s]:%d"):format(self:getfd(), tostring(self.conn), self.peer[1], self.peer[2]);
 		else
-			return ("%d [%s]:%d"):format(self:getfd(), self.peer[1], self.peer[2]);
+			return ("%d [%s]:%d"):format(self:getfd(), self.peername, self.peerport);
 		end
 	end
 	return tostring(self:getfd());
@@ -147,7 +147,23 @@
 end
 
 function interface:ip()
-	return self.peer[1];
+	return self.peername or self.sockname;
+end
+
+function interface:port()
+	return self.sockport or self.peerport;
+end
+
+function interface:clientport()
+	return self.sockport;
+end
+
+function interface:serverport()
+	if self.sockport then
+		return self.sockport;
+	elseif self.server then
+		self.server:port();
+	end
 end
 
 function interface:socket()
@@ -396,7 +412,10 @@
 		tls = tls;
 	}, interface_mt);
 	if client.getpeername then
-		conn.peer = {client:getpeername()}
+		conn.peername, conn.peerport = client:getpeername();
+	end
+	if client.getsockname then
+		conn.sockname, conn.sockport = client:getsockname();
 	end
 
 	fds[conn:getfd()] = conn;
@@ -461,7 +480,8 @@
 		_pattern = pattern;
 		onreadable = interface.onacceptable;
 		tls = tls;
-		peer = { addr, port };
+		sockname = addr;
+		sockport = port;
 	}, interface_mt);
 	server:setflags(true, false);
 	fds[server:getfd()] = server;