Comparison

net/server_epoll.lua @ 11695:1573099157c9

net.server_epoll: Propagate returns from opportunistic writes So that if a write ends up writing directly to the socket, it gets the actual return value
author Kim Alvefur <zash@zash.se>
date Fri, 16 Jul 2021 01:21:05 +0200
parent 11694:d6be4dda1f60
child 11696:917eca7be82b
comparison
equal deleted inserted replaced
11694:d6be4dda1f60 11695:1573099157c9
475 for i = #buffer, 1, -1 do 475 for i = #buffer, 1, -1 do
476 buffer[i] = nil; 476 buffer[i] = nil;
477 end 477 end
478 self:setwritetimeout(false); 478 self:setwritetimeout(false);
479 self:ondrain(); -- Be aware of writes in ondrain 479 self:ondrain(); -- Be aware of writes in ondrain
480 return; 480 return ok;
481 elseif partial then 481 elseif partial then
482 self:debug("Sent %d out of %d buffered bytes", partial, #data); 482 self:debug("Sent %d out of %d buffered bytes", partial, #data);
483 buffer[1] = data:sub(partial+1); 483 buffer[1] = data:sub(partial+1);
484 for i = #buffer, 2, -1 do 484 for i = #buffer, 2, -1 do
485 buffer[i] = nil; 485 buffer[i] = nil;
492 elseif err == "wantread" then 492 elseif err == "wantread" then
493 self:set(true, nil); 493 self:set(true, nil);
494 elseif err ~= "timeout" then 494 elseif err ~= "timeout" then
495 self:on("disconnect", err); 495 self:on("disconnect", err);
496 self:destroy(); 496 self:destroy();
497 return ok, err;
497 end 498 end
498 end 499 end
499 500
500 -- The write buffer has been successfully emptied 501 -- The write buffer has been successfully emptied
501 function interface:ondrain() 502 function interface:ondrain()
511 self.writebuffer = { data }; 512 self.writebuffer = { data };
512 end 513 end
513 if not self._write_lock then 514 if not self._write_lock then
514 if cfg.opportunistic_writes and not self._opportunistic_write then 515 if cfg.opportunistic_writes and not self._opportunistic_write then
515 self._opportunistic_write = true; 516 self._opportunistic_write = true;
516 self:onwritable(); 517 local ret, err = self:onwritable();
517 self._opportunistic_write = nil; 518 self._opportunistic_write = nil;
518 return #data; 519 return ret, err;
519 end 520 end
520 self:setwritetimeout(); 521 self:setwritetimeout();
521 self:set(nil, true); 522 self:set(nil, true);
522 end 523 end
523 return #data; 524 return #data;