changed ArrayList to List<Socket>, removed redundant HashSet.Contains

- better performance for List<Socket> over ArrayList
- HashSet.Add does nothing if item is already in HashSet (not like
Dictionary where ArgumentException is thrown)