Close an asynchronous connection
===

I've created an asynchronous server in C# to go along with my Android application.  The server is similar to this: http://msdn.microsoft.com/en-us/library/fx6588te.aspx

It works well and I can have many clients connect and receive data from the server at the same time.  One problem that I've found is that in my Android app if you are already connected over Wifi and press the connect button again, the server spawns a new socket.  The server should kill the old connection first and then create a new connection.  On the Android side I make sure to call `close()` and even set it to null afterwards.  I also send a disconnect control signal to the server so that it can also call `close()` on the socket.  For example, here's how I do it in the server:

    if (state.storage.parseJson(content) == JsonStorage.DISCONNECT)
    {
        Console.WriteLine("Disconnect2!");
        state.workSocket.Shutdown(SocketShutdown.Both);
        state.workSocket.Close();
        return;
    }

When I inspect my server process in a program called "CurrPorts" it shows several connections open to my Android device on different ports.  I send data to my clients using a Timer object, and I also check to see if the connection is active otherwise I close it.  For example, my TimerCallback method:

    public void TimeCallBack(object input)
    {
        StateObject state = (StateObject)input;
        if (state.workSocket.Connected)
        {
            Send(state.workSocket, state.storage.getJson());
        }
        else
        {
            Console.WriteLine("Dispose!");
            state.timer.Dispose();
            state.workSocket.Close();
        }
    }

I can't think of why my server isn't closing old connections.  There should only be as many connections open as devices connected to the server.  If this were a threaded blocking server then it would be easy to just close the thread down, but I'm not sure what to do in this case.