configmanager: Added rawget().
[prosody.git] / net / dns.lua
index 23a453aa82e1c49be9e269655240f7238f43e463..61fb62e8e2f6855f5f2117bcb74f977b46dfe21e 100644 (file)
@@ -602,7 +602,11 @@ function resolver:getsocket(servernum)    -- - - - - - - - - - - - - getsocket
        local sock = self.socket[servernum];
        if sock then return sock; end
 
-       sock = socket.udp();
+       local err;
+       sock, err = socket.udp();
+       if not sock then
+               return nil, err;
+       end
        if self.socket_wrapper then sock = self.socket_wrapper(sock, self); end
        sock:settimeout(0);
        -- todo: attempt to use a random port, fallback to 0
@@ -718,7 +722,10 @@ function resolver:query(qname, qtype, qclass)    -- - - - - - - - - - -- query
                --set(self.yielded, co, qclass, qtype, qname, true);
        end
 
-       local conn = self:getsocket(o.server)
+       local conn, err = self:getsocket(o.server)
+       if not conn then
+               return nil, err;
+       end
        conn:send (o.packet)
        
        if timer and self.timeout then
@@ -730,16 +737,18 @@ function resolver:query(qname, qtype, qclass)    -- - - - - - - - - - -- query
                                        i = i + 1;
                                        self:servfail(conn);
                                        o.server = self.best_server;
-                                       conn = self:getsocket(o.server);
-                                       conn:send(o.packet);
-                                       return self.timeout;
-                               else
-                                       -- Tried everything, failed
-                                       self:cancel(qclass, qtype, qname, co, true);
+                                       conn, err = self:getsocket(o.server);
+                                       if conn then
+                                               conn:send(o.packet);
+                                               return self.timeout;
+                                       end
                                end
+                               -- Tried everything, failed
+                               self:cancel(qclass, qtype, qname, co, true);
                        end
                end)
        end
+       return true;
 end
 
 function resolver:servfail(sock)