]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/resolve.c
include <arpa/inet.h> inside tool.h
[ngircd-alex.git] / src / ngircd / resolve.c
index 7f10698d3aab9437e9f71947343753b154c37660..dbf28736ab8c2329705be524c5d893be5266e230 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: resolve.c,v 1.24 2006/05/10 21:24:01 alex Exp $";
+static char UNUSED id[] = "$Id: resolve.c,v 1.27 2007/11/25 18:42:37 fw Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -24,7 +24,6 @@ static char UNUSED id[] = "$Id: resolve.c,v 1.24 2006/05/10 21:24:01 alex Exp $"
 #include <unistd.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
-#include <arpa/inet.h>
 #include <netdb.h>
 
 #ifdef IDENTAUTH
@@ -36,6 +35,7 @@ static char UNUSED id[] = "$Id: resolve.c,v 1.24 2006/05/10 21:24:01 alex Exp $"
 #include "conn.h"
 #include "defines.h"
 #include "log.h"
+#include "tool.h"
 
 #include "exp.h"
 #include "resolve.h"
@@ -313,7 +313,8 @@ register_callback( RES_STAT *s, void (*cbfunc)(int, short))
                        return true;
 
        Log( LOG_CRIT, "Resolver: Could not register callback function: %s!", strerror(errno));
-       Resolve_Shutdown(s);
+       close(s->resolver_fd);
+       Resolve_Init(s);
        return false;
 }
 
@@ -333,40 +334,31 @@ Resolve_Shutdown( RES_STAT *s)
        return ret;
 }
 
-                
+
 /**
  * Read result of resolver sub-process from pipe
  */
 GLOBAL size_t
 Resolve_Read( RES_STAT *s, void* readbuf, size_t buflen)
 {
-       int err;
        ssize_t bytes_read;
 
        assert(buflen > 0);
 
        /* Read result from pipe */
-       errno = 0;
        bytes_read = read(s->resolver_fd, readbuf, buflen);
        if (bytes_read < 0) {
-               if (errno != EAGAIN) {
-                       err = errno;
-                       Log( LOG_CRIT, "Resolver: Can't read result: %s!", strerror(err));
-                       Resolve_Shutdown(s);
-                       errno = err;
+               if (errno == EAGAIN)
                        return 0;
-               }
-               return 0;
-       }
 
-       Resolve_Shutdown(s);
-       if (bytes_read == 0) {  /* EOF: lookup failed */
+               Log( LOG_CRIT, "Resolver: Can't read result: %s!", strerror(errno));
+               bytes_read = 0;
+       }
 #ifdef DEBUG
+       else if (bytes_read == 0)
                Log( LOG_DEBUG, "Resolver: Can't read result: EOF");
 #endif
-               return 0;
-       }
-
+       Resolve_Shutdown(s);
        return (size_t)bytes_read;
 }
 /* -eof- */