Generally I don't like making a post that only includes links to other posts, but I'm making an exception for this case.  In this (http://blogs.msdn.com/malarch/archive/2005/11/18/494769.aspx) article Malar explains how to create a single socket that can listen for IPv6 and IPv4 connections.  This ability is due to the new TCP/IP stack in Vista.  Malar uses the following code to demonstrate creating such a socket:

 

 static void Main(string[] args)
        {
            Socket sock = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
            sock.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, 0);
            sock.Bind(new IPEndPoint(IPAddress.IPv6Any, 8000));
            sock.Listen(4);
            Socket client = sock.Accept();
            Console.WriteLine("Client has connected successfully with the server");
        }

The socket option being set above is pound (#) defined in Winsock as IPv6Only; however, since this is a Vista feature, we don't have the name encapsulated in the SocketOptionName enumeration yet.  I should note, the above is not supported in Whidbey, but we are working to enable this scenario in a future release.