#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.26 2006/12/17 22:50:51 fw Exp $";
#include "imp.h"
#include <assert.h>
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;
}
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- */