Merge 0.9 -> 0.10
authorKim Alvefur <zash@zash.se>
Sun, 9 Nov 2014 19:30:04 +0000 (20:30 +0100)
committerKim Alvefur <zash@zash.se>
Sun, 9 Nov 2014 19:30:04 +0000 (20:30 +0100)
1  2 
net/adns.lua
net/dns.lua

diff --cc net/adns.lua
index 15814fe7a4c5d8240bd1373fbe493f336d5a5436,3fc958f4771d6e69a0cc4fc157529dbad52146f0..87f2876b1f84b5102425b1d896e5718dbe1ce117
@@@ -73,10 -73,10 +73,10 @@@ function new_async_socket(sock, resolve
        if not handler then
                return nil, err;
        end
 -      
 +
        handler.settimeout = function () end
        handler.setsockname = function (_, ...) return sock:setsockname(...); end
-       handler.setpeername = function (_, ...) peername = (...); local ret = sock:setpeername(...); _:set_send(dummy_send); return ret; end
+       handler.setpeername = function (_, ...) peername = (...); local ret, err = sock:setpeername(...); _:set_send(dummy_send); return ret, err; end
        handler.connect = function (_, ...) return sock:connect(...) end
        --handler.send = function (_, data) _:write(data);  return _.sendbuffer and _.sendbuffer(); end
        handler.send = function (_, data)
diff --cc net/dns.lua
index 2b03caf605af685408cd909d95592e7be6ee6d28,13417ceeaa368a34b7a35fb7e6bea5f81ef1c077..2cb677f6e052f53a14cf6ea848a53eb394241fc8
@@@ -624,23 -622,22 +624,27 @@@ function resolver:getsocket(servernum
        local sock = self.socket[servernum];
        if sock then return sock; end
  
-       local err;
+       local ok, err;
 -      sock, err = socket.udp();
 +      local peer = self.server[servernum];
 +      if peer:find(":") then
 +              sock, err = socket.udp6();
 +      else
 +              sock, err = socket.udp();
 +      end
        if sock and self.socket_wrapper then sock, err = self.socket_wrapper(sock, self); end
        if not sock then
                return nil, err;
        end
        sock:settimeout(0);
        -- todo: attempt to use a random port, fallback to 0
-       sock:setsockname('*', 0);
-       sock:setpeername(peer, 53);
        self.socket[servernum] = sock;
        self.socketset[sock] = servernum;
 -      ok, err = sock:setpeername(self.server[servernum], 53);
+       -- set{sock,peer}name can fail, eg because of local routing table
+       -- if so, try the next server
+       ok, err = sock:setsockname('*', 0);
+       if not ok then return self:servfail(sock, err); end
++      ok, err = sock:setpeername(peer, 53);
+       if not ok then return self:servfail(sock, err); end
        return sock;
  end