Mercurial > prosody-hg
comparison net/server_select.lua @ 10852:2e48aebdb915
net.server_select: Pass conn/handler to readbuffer/sendbuffer
The internal implementations don't use it, but this causes onreadable
and onwritable of watchfd to receive the conn as they do in other
backends.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 01 Jun 2020 13:41:41 +0100 |
| parents | 6cf16abd0976 |
| children | d105e787f5ed |
comparison
equal
deleted
inserted
replaced
| 10851:6cf16abd0976 | 10852:2e48aebdb915 |
|---|---|
| 382 handler.close = function( self, err ) | 382 handler.close = function( self, err ) |
| 383 if not handler then return true; end | 383 if not handler then return true; end |
| 384 _readlistlen = removesocket( _readlist, socket, _readlistlen ) | 384 _readlistlen = removesocket( _readlist, socket, _readlistlen ) |
| 385 _readtimes[ handler ] = nil | 385 _readtimes[ handler ] = nil |
| 386 if bufferqueuelen ~= 0 then | 386 if bufferqueuelen ~= 0 then |
| 387 handler.sendbuffer() -- Try now to send any outstanding data | 387 handler:sendbuffer() -- Try now to send any outstanding data |
| 388 if bufferqueuelen ~= 0 then -- Still not empty, so we'll try again later | 388 if bufferqueuelen ~= 0 then -- Still not empty, so we'll try again later |
| 389 if handler then | 389 if handler then |
| 390 handler.write = nil -- ... but no further writing allowed | 390 handler.write = nil -- ... but no further writing allowed |
| 391 end | 391 end |
| 392 toclose = true | 392 toclose = true |
| 750 | 750 |
| 751 local function link(sender, receiver, buffersize) | 751 local function link(sender, receiver, buffersize) |
| 752 local sender_locked; | 752 local sender_locked; |
| 753 local _sendbuffer = receiver.sendbuffer; | 753 local _sendbuffer = receiver.sendbuffer; |
| 754 function receiver.sendbuffer() | 754 function receiver.sendbuffer() |
| 755 _sendbuffer(); | 755 _sendbuffer(receiver); |
| 756 if sender_locked and receiver.bufferlen() < buffersize then | 756 if sender_locked and receiver.bufferlen() < buffersize then |
| 757 sender:lock_read(false); -- Unlock now | 757 sender:lock_read(false); -- Unlock now |
| 758 sender_locked = nil; | 758 sender_locked = nil; |
| 759 end | 759 end |
| 760 end | 760 end |
| 960 | 960 |
| 961 local read, write, err = socket_select( _readlist, _sendlist, math_min(_selecttimeout, next_timer_time) ) | 961 local read, write, err = socket_select( _readlist, _sendlist, math_min(_selecttimeout, next_timer_time) ) |
| 962 for _, socket in ipairs( read ) do -- receive data | 962 for _, socket in ipairs( read ) do -- receive data |
| 963 local handler = _socketlist[ socket ] | 963 local handler = _socketlist[ socket ] |
| 964 if handler then | 964 if handler then |
| 965 handler.readbuffer( ) | 965 handler:readbuffer( ) |
| 966 else | 966 else |
| 967 closesocket( socket ) | 967 closesocket( socket ) |
| 968 out_put "server.lua: found no handler and closed socket (readlist)" -- this can happen | 968 out_put "server.lua: found no handler and closed socket (readlist)" -- this can happen |
| 969 end | 969 end |
| 970 end | 970 end |
| 971 for _, socket in ipairs( write ) do -- send data waiting in writequeues | 971 for _, socket in ipairs( write ) do -- send data waiting in writequeues |
| 972 local handler = _socketlist[ socket ] | 972 local handler = _socketlist[ socket ] |
| 973 if handler then | 973 if handler then |
| 974 handler.sendbuffer( ) | 974 handler:sendbuffer( ) |
| 975 else | 975 else |
| 976 closesocket( socket ) | 976 closesocket( socket ) |
| 977 out_put "server.lua: found no handler and closed socket (writelist)" -- this should not happen | 977 out_put "server.lua: found no handler and closed socket (writelist)" -- this should not happen |
| 978 end | 978 end |
| 979 end | 979 end |
