diff options
author | Kim Alvefur <zash@zash.se> | 2013-12-23 17:57:53 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2013-12-23 17:57:53 +0100 |
commit | cf48e76e783abc6925a78a4a3750d3a1cbaaf864 (patch) | |
tree | 90ef8d101114a4db8ee86dfa99884d8a7c586b81 | |
parent | 3e156487cff0779f075a765451cacb2a7c47b52c (diff) | |
download | prosody-cf48e76e783abc6925a78a4a3750d3a1cbaaf864.tar.gz prosody-cf48e76e783abc6925a78a4a3750d3a1cbaaf864.zip |
net.server_{select,event}: addclient: Use getaddrinfo to detect IP address type if no socket type argument given. (Argument must be given for non-TCP)
-rw-r--r-- | net/server_event.lua | 9 | ||||
-rw-r--r-- | net/server_select.lua | 10 |
2 files changed, 17 insertions, 2 deletions
diff --git a/net/server_event.lua b/net/server_event.lua index ae64d50e..1a3b8ca6 100644 --- a/net/server_event.lua +++ b/net/server_event.lua @@ -46,6 +46,7 @@ local t_concat = table.concat local has_luasec, ssl = pcall ( require , "ssl" ) local socket = use "socket" or require "socket" +local getaddrinfo = socket.dns.getaddrinfo local log = require ("util.logger").init("socket") @@ -742,7 +743,13 @@ do return nil, "luasec not found" end if not typ then - typ = "tcp" + local addrinfo, err = getaddrinfo(addr) + if not addrinfo then return nil, err end + if addrinfo[1] and addrinfo[1].family == "inet6" then + typ = "tcp6" + else + typ = "tcp" + end end local create = socket[typ] if type( create ) ~= "function" then diff --git a/net/server_select.lua b/net/server_select.lua index 1ce3c8c7..ee9cac7e 100644 --- a/net/server_select.lua +++ b/net/server_select.lua @@ -51,6 +51,7 @@ local coroutine_yield = coroutine.yield local has_luasec, luasec = pcall ( require , "ssl" ) local luasocket = use "socket" or require "socket" local luasocket_gettime = luasocket.gettime +local getaddrinfo = luasocket.dns.getaddrinfo --// extern lib methods //-- @@ -942,12 +943,19 @@ local addclient = function( address, port, listeners, pattern, sslctx, typ ) err = "luasec not found" end if not typ then - typ = "tcp" + local addrinfo, err = getaddrinfo(address) + if not addrinfo then return nil, err end + if addrinfo[1] and addrinfo[1].family == "inet6" then + typ = "tcp6" + else + typ = "tcp" + end end local create = luasocket[typ] if type( create ) ~= "function" then err = "invalid socket type" end + if err then out_error( "server.lua, addclient: ", err ) return nil, err |