This looks very solid.  The only thing I notice that's missing is the display/port number.

This will provide a nice framework for future development.

I'm curious how you plan to implement groups functionality within this framework.  Will you do something like:
[[ServerDataManager sharedInstance] getServerEnumeratorUsingCriteria: criteriaDictionary];

where the criteria dictionary is whatever sorts of criteria our smart groups can handle, like maybe a subnet or something.


There is a function called "display" that I am using for that currently.

For groups, I'm planning to have a function to fetch an enumerator that will allow you to walk through all groups.  There will be a couple of "well known" groups like "All" and "Rendezvous," but I assume most users will either want to walk through them all, or will already know the group they want.  There will be another function that fetches an enumerator for the specific group.