You can't do a RemoveFirst on a Dictionary.
Why would you need pointers?
Anyway,
http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx would suffice (just create a List<KVP<String, Socket>>, or swap String & Socket if you want the latter to be the key.).