Software /
code /
prosody
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; |