Comparison

net/server_select.lua @ 10233:600eee3c4752

net.server: Accept and save an 'extra' field for client connections This lets code attach some extra data to be attached to client connections.
author Kim Alvefur <zash@zash.se>
date Sun, 01 Sep 2019 01:55:55 +0200
parent 9993:02a41315d275
child 10234:d4390c427a66
comparison
equal deleted inserted replaced
10232:58685d77c07c 10233:600eee3c4752
264 end 264 end
265 end 265 end
266 return handler 266 return handler
267 end 267 end
268 268
269 wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx, ssldirect ) -- this function wraps a client to a handler object 269 wrapconnection = function( server, listeners, socket, ip, serverport, clientport, pattern, sslctx, ssldirect, extra ) -- this function wraps a client to a handler object
270 270
271 if socket:getfd() >= _maxfd then 271 if socket:getfd() >= _maxfd then
272 out_error("server.lua: Disallowed FD number: "..socket:getfd()) -- PROTIP: Switch to libevent 272 out_error("server.lua: Disallowed FD number: "..socket:getfd()) -- PROTIP: Switch to libevent
273 socket:close( ) -- Should we send some kind of error here? 273 socket:close( ) -- Should we send some kind of error here?
274 if server then 274 if server then
313 local maxreadlen = _maxreadlen 313 local maxreadlen = _maxreadlen
314 314
315 --// public methods of the object //-- 315 --// public methods of the object //--
316 316
317 local handler = bufferqueue -- saves a table ^_^ 317 local handler = bufferqueue -- saves a table ^_^
318
319 handler.extra = extra
318 320
319 handler.dispatch = function( ) 321 handler.dispatch = function( )
320 return dispatch 322 return dispatch
321 end 323 end
322 handler.disconnect = function( ) 324 handler.disconnect = function( )
1003 return "select"; 1005 return "select";
1004 end 1006 end
1005 1007
1006 --// EXPERIMENTAL //-- 1008 --// EXPERIMENTAL //--
1007 1009
1008 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx ) 1010 local wrapclient = function( socket, ip, serverport, listeners, pattern, sslctx, extra )
1009 local handler, socket, err = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx, sslctx) 1011 local handler, socket, err = wrapconnection( nil, listeners, socket, ip, serverport, "clientport", pattern, sslctx, sslctx, extra)
1010 if not handler then return nil, err end 1012 if not handler then return nil, err end
1011 _socketlist[ socket ] = handler 1013 _socketlist[ socket ] = handler
1012 if not sslctx then 1014 if not sslctx then
1013 _readlistlen = addsocket(_readlist, socket, _readlistlen) 1015 _readlistlen = addsocket(_readlist, socket, _readlistlen)
1014 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen) 1016 _sendlistlen = addsocket(_sendlist, socket, _sendlistlen)
1023 end 1025 end
1024 end 1026 end
1025 return handler, socket 1027 return handler, socket
1026 end 1028 end
1027 1029
1028 local addclient = function( address, port, listeners, pattern, sslctx, typ ) 1030 local addclient = function( address, port, listeners, pattern, sslctx, typ, extra )
1029 local err 1031 local err
1030 if type( listeners ) ~= "table" then 1032 if type( listeners ) ~= "table" then
1031 err = "invalid listener table" 1033 err = "invalid listener table"
1032 elseif type ( address ) ~= "string" then 1034 elseif type ( address ) ~= "string" then
1033 err = "invalid address" 1035 err = "invalid address"
1060 return nil, err 1062 return nil, err
1061 end 1063 end
1062 client:settimeout( 0 ) 1064 client:settimeout( 0 )
1063 local ok, err = client:setpeername( address, port ) 1065 local ok, err = client:setpeername( address, port )
1064 if ok or err == "timeout" or err == "Operation already in progress" then 1066 if ok or err == "timeout" or err == "Operation already in progress" then
1065 return wrapclient( client, address, port, listeners, pattern, sslctx ) 1067 return wrapclient( client, address, port, listeners, pattern, sslctx, extra )
1066 else 1068 else
1067 return nil, err 1069 return nil, err
1068 end 1070 end
1069 end 1071 end
1070 1072