Software / code / prosody
Comparison
net/server_select.lua @ 3382:fea0f8e19e4c
net.server_select: Ensure that onconnect is called for server sockets as well as clients, rather than onincoming. Fixes mod_console traceback, issue #197
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 16 Jul 2010 22:28:50 +0100 |
| parent | 3312:12fc7e005e8b |
| child | 3398:abc4a52aef02 |
comparison
equal
deleted
inserted
replaced
| 3381:28cb5ad72870 | 3382:fea0f8e19e4c |
|---|---|
| 165 | 165 |
| 166 maxconnections = maxconnections or _maxclientsperserver | 166 maxconnections = maxconnections or _maxclientsperserver |
| 167 | 167 |
| 168 local connections = 0 | 168 local connections = 0 |
| 169 | 169 |
| 170 local dispatch, disconnect = listeners.onincoming, listeners.ondisconnect | 170 local dispatch, disconnect = listeners.onconnect or listeners.onincoming, listeners.ondisconnect |
| 171 | 171 |
| 172 local accept = socket.accept | 172 local accept = socket.accept |
| 173 | 173 |
| 174 --// public methods of the object //-- | 174 --// public methods of the object //-- |
| 175 | 175 |
| 621 receive = socket.receive | 621 receive = socket.receive |
| 622 shutdown = ( ssl and id ) or socket.shutdown | 622 shutdown = ( ssl and id ) or socket.shutdown |
| 623 | 623 |
| 624 _socketlist[ socket ] = handler | 624 _socketlist[ socket ] = handler |
| 625 _readlistlen = addsocket(_readlist, socket, _readlistlen) | 625 _readlistlen = addsocket(_readlist, socket, _readlistlen) |
| 626 if listeners.onconnect then | |
| 627 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) | |
| 628 handler.sendbuffer = function () | |
| 629 listeners.onconnect(handler); | |
| 630 handler.sendbuffer = _sendbuffer; | |
| 631 if bufferqueuelen > 0 then | |
| 632 return _sendbuffer(); | |
| 633 end | |
| 634 end | |
| 635 end | |
| 636 return handler, socket | 626 return handler, socket |
| 637 end | 627 end |
| 638 | 628 |
| 639 id = function( ) | 629 id = function( ) |
| 640 end | 630 end |
| 852 | 842 |
| 853 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx ) | 843 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx ) |
| 854 local handler = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx ) | 844 local handler = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx ) |
| 855 _socketlist[ socket ] = handler | 845 _socketlist[ socket ] = handler |
| 856 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) | 846 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) |
| 847 if listeners.onconnect then | |
| 848 -- When socket is writeable, call onconnect | |
| 849 local _sendbuffer = handler.sendbuffer; | |
| 850 handler.sendbuffer = function () | |
| 851 listeners.onconnect(handler); | |
| 852 handler.sendbuffer = _sendbuffer; | |
| 853 -- If there was data with the incoming packet, handle it now. | |
| 854 if #handler:bufferqueue() > 0 then | |
| 855 return _sendbuffer(); | |
| 856 end | |
| 857 end | |
| 858 end | |
| 857 return handler, socket | 859 return handler, socket |
| 858 end | 860 end |
| 859 | 861 |
| 860 local addclient = function( address, port, listeners, pattern, sslctx ) | 862 local addclient = function( address, port, listeners, pattern, sslctx ) |
| 861 local client, err = luasocket.tcp( ) | 863 local client, err = luasocket.tcp( ) |