On Wed, Nov 05, 2003 at 09:43:43AM +1300, Stuart Whelan - Simulation Hardware LTD wrote:
Hmm. Which resolver is it using? Does strace show anything useful (try strace -eopen,socket iftop)? Can you use lsof or similar to identify files the process has open?
Hi Chris,
Thanks for the prompt reply. :)
Judging from the make output of the port it is using the forking resolver:
checking how to call gethostbyaddr_r... no idea; dropping back to the
forking resolver
I just tried to build strace onto my system, but it is having problems, I will get back to you on that one.
ok... I can't reproduce this here (on Linux), so it may be a FreeBSD issue. Could you try applying the following patch, which will make iftop print some debugging information from the resolver, and then running iftop with a command line like
iftop -i whatever ... 2> iftop.log
-- and then telling me what the contents of iftop.log look like? (Obviously you have to direct stderr into a file since otherwise it'll mess up the display....)
diff -u -r1.18 resolver.c --- resolver.c 6 Sep 2003 13:52:36 -0000 1.18 +++ resolver.c 5 Nov 2003 12:46:04 -0000 @@ -320,7 +320,7 @@ workerinfo = xmalloc(sizeof *workerinfo); pthread_setspecific(worker_key, workerinfo); workerinfo->fd = p[0]; - + switch (workerinfo->child = fork()) { case 0: close(p[0]); @@ -332,6 +332,7 @@ return NULL;
default: +fprintf(stderr, "New child is %d, we have fd %d, he has fd %d\n", workerinfo->child, p[0], p[1]); close(p[1]); } } @@ -340,11 +341,13 @@ if (write(workerinfo->fd, addr, sizeof *addr) != sizeof *addr || read(workerinfo->fd, name, NAMESIZE) != NAMESIZE) { /* Something went wrong. Just kill the child and get on with it. */ +fprintf(stderr, "Protocol error (%s) talking to child %d\n", strerror(errno), workerinfo->child); kill(workerinfo->child, SIGKILL); wait(); close(workerinfo->fd); xfree(workerinfo); pthread_setspecific(worker_key, NULL); + *name = 0; } if (!*name) return NULL;