net/server_epoll.lua
changeset 7601 335b5ce06062
parent 7600 cd34aa6b1632
child 7602 afbda0bd9cfc
equal deleted inserted replaced
7600:cd34aa6b1632 7601:335b5ce06062
    28 	read_timeout = 900;
    28 	read_timeout = 900;
    29 	write_timeout = 7;
    29 	write_timeout = 7;
    30 	tcp_backlog = 128;
    30 	tcp_backlog = 128;
    31 	accept_retry_interval = 10;
    31 	accept_retry_interval = 10;
    32 	read_retry_delay = 1e-06;
    32 	read_retry_delay = 1e-06;
       
    33 	handshake_timeout = 60;
    33 };
    34 };
    34 
    35 
    35 local fds = createtable(10, 0); -- FD -> conn
    36 local fds = createtable(10, 0); -- FD -> conn
    36 local timers = {};
    37 local timers = {};
    37 
    38 
   383 		self.conn = conn;
   384 		self.conn = conn;
   384 		self._starttls = nil;
   385 		self._starttls = nil;
   385 		self.onwriteable = interface.tlshandskake;
   386 		self.onwriteable = interface.tlshandskake;
   386 		self.onreadable = interface.tlshandskake;
   387 		self.onreadable = interface.tlshandskake;
   387 		self:setflags(true, true);
   388 		self:setflags(true, true);
       
   389 		self:setwritetimeout(cfg.handshake_timeout);
   388 	end
   390 	end
   389 end
   391 end
   390 
   392 
   391 function interface:tlshandskake()
   393 function interface:tlshandskake()
       
   394 	self:setwritetimeout(false);
       
   395 	self:setreadtimeout(false);
   392 	local ok, err = self.conn:dohandshake();
   396 	local ok, err = self.conn:dohandshake();
   393 	if ok then
   397 	if ok then
   394 		log("debug", "TLS handshake on %s complete", tostring(self));
   398 		log("debug", "TLS handshake on %s complete", tostring(self));
   395 		self.onwriteable = nil;
   399 		self.onwriteable = nil;
   396 		self.onreadable = nil;
   400 		self.onreadable = nil;
   404 			self:on("status", "ssl-handshake-complete");
   408 			self:on("status", "ssl-handshake-complete");
   405 		end
   409 		end
   406 	elseif err == "wantread" then
   410 	elseif err == "wantread" then
   407 		log("debug", "TLS handshake on %s to wait until readable", tostring(self));
   411 		log("debug", "TLS handshake on %s to wait until readable", tostring(self));
   408 		self:setflags(true, false);
   412 		self:setflags(true, false);
   409 		self:setwritetimeout(false);
       
   410 		self:setreadtimeout(cfg.handshake_timeout);
   413 		self:setreadtimeout(cfg.handshake_timeout);
   411 	elseif err == "wantwrite" then
   414 	elseif err == "wantwrite" then
   412 		log("debug", "TLS handshake on %s to wait until writable", tostring(self));
   415 		log("debug", "TLS handshake on %s to wait until writable", tostring(self));
   413 		self:setflags(false, true);
   416 		self:setflags(false, true);
   414 		self:setreadtimeout(false);
       
   415 		self:setwritetimeout(cfg.handshake_timeout);
   417 		self:setwritetimeout(cfg.handshake_timeout);
   416 	else
   418 	else
   417 		log("debug", "TLS handshake error on %s: %s", tostring(self), err);
   419 		log("debug", "TLS handshake error on %s: %s", tostring(self), err);
   418 		self:on("disconnect", err);
   420 		self:on("disconnect", err);
   419 		self:destroy();
   421 		self:destroy();