Merge 0.10->trunk
[prosody.git] / net / server_select.lua
index 1ce3c8c7a4ea3ea484ff2018a1f1a5c68c1916db..4a36617cf2f34bfaea531621b3a4f0dcfed8f339 100644 (file)
@@ -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 //--
 
@@ -401,6 +402,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
        handler.clientport = function( )
                return clientport
        end
+       handler.port = handler.clientport -- COMPAT server_event
        local write = function( self, data )
                bufferlen = bufferlen + #data
                if bufferlen > maxsendlen then
@@ -941,13 +943,18 @@ local addclient = function( address, port, listeners, pattern, sslctx, typ )
        elseif sslctx and not has_luasec then
                err = "luasec not found"
        end
-       if not typ then
-               typ = "tcp"
+       if getaddrinfo and not typ then
+               local addrinfo, err = getaddrinfo(address)
+               if not addrinfo then return nil, err end
+               if addrinfo[1] and addrinfo[1].family == "inet6" then
+                       typ = "tcp6"
+               end
        end
-       local create = luasocket[typ]
+       local create = luasocket[typ or "tcp"]
        if type( create ) ~= "function"  then
                err = "invalid socket type"
        end
+
        if err then
                out_error( "server.lua, addclient: ", err )
                return nil, err