Hi Jayson,

On Sep 8, 2009, at 4:51 PM, Jayson Adams wrote:


On Sep 8, 2009, at 3:31 PM, Marc Krochmal wrote:

Hi Brent,

I may have been one of those appalled Apple engineers. In general, [NSHost currentHost] is the worst API on the system and people should avoid it like the plague.

Hi Marc,

Can you tell why this is so?

[NSHost currentHost] as currently written, iterates over all available IP addresses on the system and does reverse DNS lookups on each address. It actually does this twice for each address. This includes loopback and link-local addresses, IPv4 and IPv6. This results in packets hitting the network. If DNS servers are slow to respond, this call will block and your application will SPOD. If DNS happens to be down or temporarily misconfigured, each individual query will take 30 seconds to timeout. All the queries are performed serially so the timeouts start to add up.

If you're just looking for the mDNS Local Hostname, it's MUCH more efficient to use SCDynamicStoreCopyLocalHostName, which is just a Mach message over to configd running on the local machine. No network delays.

If you just want to know the list of IP addresses, instead of doing [[NSHost currentHost] addresses], it's much more efficient to use getifaddrs, which doesn't require any DNS queries.

So in general people should avoid calling this API, or make sure to call it async, either on a separate thread or on a concurrent GCD queue.

Of course, given that we're aware of the performance issues, don't be surprised if [NSHost currentHost] performs better in future releases.

-Marc








Best,


__jayson

Circus Ponies NoteBook - Organization for a Creative Mind
www.circusponies.com




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to