mirror of
https://github.com/bjc/prosody.git
synced 2025-04-04 21:57:45 +03:00
net.server_select, net.server_event: Support for ondrain listener callback for when send buffer is empty
This commit is contained in:
parent
242d67b43e
commit
3c7eb58b08
2 changed files with 9 additions and 1 deletions
|
@ -465,6 +465,8 @@ do
|
|||
end
|
||||
function interface_mt:ontimeout()
|
||||
end
|
||||
function interface_mt:ondrain()
|
||||
end
|
||||
function interface_mt:onstatus()
|
||||
debug("server.lua: Dummy onstatus()")
|
||||
end
|
||||
|
@ -545,6 +547,7 @@ do
|
|||
if succ then -- writing succesful
|
||||
interface.writebuffer = ""
|
||||
interface.writebufferlen = 0
|
||||
interface:ondrain();
|
||||
if interface.fatalerror then
|
||||
debug "closing client after writing"
|
||||
interface:_close() -- close interface if needed
|
||||
|
|
|
@ -252,6 +252,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
|
|||
local dispatch = listeners.onincoming
|
||||
local status = listeners.onstatus
|
||||
local disconnect = listeners.ondisconnect
|
||||
local drain = listeners.ondrain
|
||||
|
||||
local bufferqueue = { } -- buffer array
|
||||
local bufferqueuelen = 0 -- end of buffer array
|
||||
|
@ -284,6 +285,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
|
|||
dispatch = listeners.onincoming
|
||||
disconnect = listeners.ondisconnect
|
||||
status = listeners.onstatus
|
||||
drain = listeners.ondrain
|
||||
end
|
||||
handler.getstats = function( )
|
||||
return readtraffic, sendtraffic
|
||||
|
@ -437,7 +439,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
|
|||
end
|
||||
local _readbuffer = function( ) -- this function reads data
|
||||
local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern"
|
||||
if not err or (err == "wantread" or err == "timeout") or (part and string_len(part) > 0) then -- received something
|
||||
if not err or (err == "wantread" or err == "timeout") then -- received something
|
||||
local buffer = buffer or part or ""
|
||||
local len = string_len( buffer )
|
||||
if len > maxreadlen then
|
||||
|
@ -479,6 +481,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
|
|||
_sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist
|
||||
_ = needtls and handler:starttls(nil, true)
|
||||
_writetimes[ handler ] = nil
|
||||
if drain then
|
||||
drain(handler)
|
||||
end
|
||||
_ = toclose and handler:close( )
|
||||
return true
|
||||
elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue