Comparison

net/server_select.lua @ 4322:aff627b1ce95

connlistener, server_select, prosody: Add support for binding to multiple addresses
author Florian Zeitz <florob@babelmonkeys.de>
date Wed, 15 Jun 2011 23:44:18 +0200
parent 4145:e992650185c8
child 4346:28b9384c14fd
comparison
equal deleted inserted replaced
4321:4dcdba6900f2 4322:aff627b1ce95
699 if type( listeners ) ~= "table" then 699 if type( listeners ) ~= "table" then
700 err = "invalid listener table" 700 err = "invalid listener table"
701 end 701 end
702 if type( port ) ~= "number" or not ( port >= 0 and port <= 65535 ) then 702 if type( port ) ~= "number" or not ( port >= 0 and port <= 65535 ) then
703 err = "invalid port" 703 err = "invalid port"
704 elseif _server[ port ] then 704 elseif _server[ addr..":"..port ] then
705 err = "listeners on port '" .. port .. "' already exist" 705 err = "listeners on '[" .. addr .. "]:" .. port .. "' already exist"
706 elseif sslctx and not luasec then 706 elseif sslctx and not luasec then
707 err = "luasec not found" 707 err = "luasec not found"
708 end 708 end
709 if err then 709 if err then
710 out_error( "server.lua, port ", port, ": ", err ) 710 out_error( "server.lua, [", addr, "]:", port, ": ", err )
711 return nil, err 711 return nil, err
712 end 712 end
713 addr = addr or "*" 713 addr = addr or "*"
714 local server, err = socket_bind( addr, port ) 714 local server, err = socket_bind( addr, port )
715 if err then 715 if err then
716 out_error( "server.lua, port ", port, ": ", err ) 716 out_error( "server.lua, [", addr, "]:", port, ": ", err )
717 return nil, err 717 return nil, err
718 end 718 end
719 local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, _maxclientsperserver ) -- wrap new server socket 719 local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, _maxclientsperserver ) -- wrap new server socket
720 if not handler then 720 if not handler then
721 server:close( ) 721 server:close( )
722 return nil, err 722 return nil, err
723 end 723 end
724 server:settimeout( 0 ) 724 server:settimeout( 0 )
725 _readlistlen = addsocket(_readlist, server, _readlistlen) 725 _readlistlen = addsocket(_readlist, server, _readlistlen)
726 _server[ port ] = handler 726 _server[ addr..":"..port ] = handler
727 _socketlist[ server ] = handler 727 _socketlist[ server ] = handler
728 out_put( "server.lua: new "..(sslctx and "ssl " or "").."server listener on '", addr, ":", port, "'" ) 728 out_put( "server.lua: new "..(sslctx and "ssl " or "").."server listener on '[", addr, "]:", port, "'" )
729 return handler 729 return handler
730 end 730 end
731 731
732 getserver = function ( port ) 732 getserver = function ( addr, port )
733 return _server[ port ]; 733 return _server[ addr..":"..port ];
734 end 734 end
735 735
736 removeserver = function( port ) 736 removeserver = function( addr, port )
737 local handler = _server[ port ] 737 local handler = _server[ addr..":"..port ]
738 if not handler then 738 if not handler then
739 return nil, "no server found on port '" .. tostring( port ) .. "'" 739 return nil, "no server found on '[" .. addr .. "]:" .. tostring( port ) .. "'"
740 end 740 end
741 handler:close( ) 741 handler:close( )
742 _server[ port ] = nil 742 _server[ addr..":"..port ] = nil
743 return true 743 return true
744 end 744 end
745 745
746 closeall = function( ) 746 closeall = function( )
747 for _, handler in pairs( _socketlist ) do 747 for _, handler in pairs( _socketlist ) do