Comparison

net/server_epoll.lua @ 8506:174fd716c9fa

server_epoll: Rework how socket readyness is detected
author Kim Alvefur <zash@zash.se>
date Fri, 02 Feb 2018 23:46:00 +0100
parent 8271:c09deab9989e
child 8507:71ef6d509105
comparison
equal deleted inserted replaced
8505:c9bdb4dfed96 8506:174fd716c9fa
503 -- Initialization 503 -- Initialization
504 function interface:init() 504 function interface:init()
505 if self.tls and not self._tls then 505 if self.tls and not self._tls then
506 return self:starttls(); 506 return self:starttls();
507 else 507 else
508 self.onwriteable = interface.onconnect; 508 self.onwriteable = interface.onfirstwritable;
509 self.onreadable = interface.onfirstreadable;
509 self:setwritetimeout(); 510 self:setwritetimeout();
510 return self:setflags(false, true); 511 return self:setflags(true, true);
511 end 512 end
512 end 513 end
513 514
514 function interface:pause() 515 function interface:pause()
515 return self:setflags(false); 516 return self:setflags(false);
535 end); 536 end);
536 end 537 end
537 538
538 -- Connected! 539 -- Connected!
539 function interface:onconnect() 540 function interface:onconnect()
541 self:setflags(true, false);
542 self:on("connect");
543 end
544
545 function interface:onfirstwritable()
546 self.onreadable = nil;
540 self.onwriteable = nil; 547 self.onwriteable = nil;
541 self:setflags(true, false); 548 self:onconnect();
542 if not self._connected then
543 self._connected = true;
544 self:on("connect");
545 end
546 return self:onwriteable(); 549 return self:onwriteable();
550 end
551
552 function interface:onfirstreadable()
553 self.onreadable = nil;
554 self.onwriteable = nil;
555 self:onconnect();
556 return self:onreadable();
547 end 557 end
548 558
549 local function addserver(addr, port, listeners, pattern, tls) 559 local function addserver(addr, port, listeners, pattern, tls)
550 local conn, err = socket.bind(addr, port, cfg.tcp_backlog); 560 local conn, err = socket.bind(addr, port, cfg.tcp_backlog);
551 if not conn then return conn, err; end 561 if not conn then return conn, err; end