Software /
code /
prosody
Comparison
net/connlisteners.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 | 4220:05f4db0459b1 |
child | 4797:e239668aa6d2 |
comparison
equal
deleted
inserted
replaced
4321:4dcdba6900f2 | 4322:aff627b1ce95 |
---|---|
10 | 10 |
11 local listeners_dir = (CFG_SOURCEDIR or ".").."/net/"; | 11 local listeners_dir = (CFG_SOURCEDIR or ".").."/net/"; |
12 local server = require "net.server"; | 12 local server = require "net.server"; |
13 local log = require "util.logger".init("connlisteners"); | 13 local log = require "util.logger".init("connlisteners"); |
14 local tostring = tostring; | 14 local tostring = tostring; |
15 local type = type | |
16 local ipairs = ipairs | |
15 | 17 |
16 local dofile, xpcall, error = | 18 local dofile, xpcall, error = |
17 dofile, xpcall, error | 19 dofile, xpcall, error |
18 | 20 |
19 local debug_traceback = debug.traceback; | 21 local debug_traceback = debug.traceback; |
53 local h, err = get(name); | 55 local h, err = get(name); |
54 if not h then | 56 if not h then |
55 error("No such connection module: "..name.. (err and (" ("..err..")") or ""), 0); | 57 error("No such connection module: "..name.. (err and (" ("..err..")") or ""), 0); |
56 end | 58 end |
57 | 59 |
58 local interface = (udata and udata.interface) or h.default_interface or "*"; | 60 local interfaces = (udata and udata.interface) or h.default_interface or "*"; |
61 if type(interfaces) == "string" then interfaces = {interfaces}; end | |
59 local port = (udata and udata.port) or h.default_port or error("Can't start listener "..name.." because no port was specified, and it has no default port", 0); | 62 local port = (udata and udata.port) or h.default_port or error("Can't start listener "..name.." because no port was specified, and it has no default port", 0); |
60 local mode = (udata and udata.mode) or h.default_mode or 1; | 63 local mode = (udata and udata.mode) or h.default_mode or 1; |
61 local ssl = (udata and udata.ssl) or nil; | 64 local ssl = (udata and udata.ssl) or nil; |
62 local autossl = udata and udata.type == "ssl"; | 65 local autossl = udata and udata.type == "ssl"; |
63 | 66 |
64 if autossl and not ssl then | 67 if autossl and not ssl then |
65 return nil, "no ssl context"; | 68 return nil, "no ssl context"; |
66 end | 69 end |
67 | 70 |
68 return server.addserver(interface, port, h, mode, autossl and ssl or nil); | 71 ok, err = true, {}; |
72 for _, interface in ipairs(interfaces) do | |
73 local handler | |
74 handler, err[interface] = server.addserver(interface, port, h, mode, autossl and ssl or nil); | |
75 ok = ok and handler; | |
76 end | |
77 | |
78 return ok, err; | |
69 end | 79 end |
70 | 80 |
71 return _M; | 81 return _M; |