Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Jun 2013 11:00:05 -0700
From:      Doug Hardie <bc979@lafn.org>
To:        "freebsd-questions@freebsd.org List" <freebsd-questions@freebsd.org>
Subject:   Re: System Calls that do DNS
Message-ID:  <12AE26D3-2C19-4C0C-917F-2D1569ADC518@lafn.org>
In-Reply-To: <CC1F81CF-1107-4031-A72F-164D6E23E5B7@lafn.org>
References:  <F5EBDC53-CBA3-415D-B7CD-1EC873692348@lafn.org> <20130604033930.GA10393@uriel.asininetech.com> <CC1F81CF-1107-4031-A72F-164D6E23E5B7@lafn.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 3 June 2013, at 22:21, Doug Hardie <bc979@lafn.org> wrote:

>=20
> On 3 June 2013, at 20:39, staticsafe <me@staticsafe.ca> wrote:
>=20
>> On Mon, Jun 03, 2013 at 07:57:07PM -0700, Doug Hardie wrote:
>>> I have an unusual situation.  A program is doing a DNS lookup and =
often the IP address has no reverse DNS entries.  As a result the =
program hangs for several timeouts.  The call is not being made directly =
in its code, but is occurring in a system call.  There are no specific =
calls to DNS, its something else doing it.  I have been trying to track =
down which system call is doing it, but without success so far.  I have =
tried syslog calls around each of the system calls I thought might be =
the culprit, but my guessing is not very good.  How can I identify the =
system call that is calling DNS?  If I can find it, I hopefully can find =
another way to do whatever it does that does not involve a reverse DNS =
lookup.
>>>=20
>>>=20
>>=20
>> Use truss:
>> http://www.freebsd.org/cgi/man.cgi?query=3Dtruss
>>=20
>> The truss utility traces the system calls called by the specified
>> process or program.
>> --=20
>> staticsafe
>> O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
>> Please don't top post - http://goo.gl/YrmAb
>> Don't CC me! I'm subscribed to whatever list I just posted on.
>>=20
>=20
> Unfortunately truss does not show anything more than ktrace.  I know =
what is going out on the internet connection.  Its a plain old reverse =
DNS request.  The question is what library module (probably not a system =
call now that I think about it) is making that request.  Interestingly =
enough, adding the IP address with a dummy name in /etc/hosts causes the =
reverse request to succeed and there are no time delays.  So whatever =
module it is, is not using bind.  Bind doesn't check the hosts files as =
far as I can tell.
> _______________________________________________

After considering all the advice I received, the method I found that =
worked was to start the process and when it entered the reverse DNS =
timeout, quickly find the process ID and do a gdb on that process.  Then =
a where command showed the entire stack which included all the module =
calls.  I had to rebuild the process with debugging first.

The IPv6 API when getting the client information will also do a reverse =
DNS lookup unless you specifically tell it not to do so.  Changing that =
eliminated the lookup and the timeouts.

Thanks to all.

-- Doug=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?12AE26D3-2C19-4C0C-917F-2D1569ADC518>