views:

62

answers:

1

i need some tips!

i am using c# sockets Asynchronous mode.

i need to serve only one connection in my application from a server point of view. once one is connected then i would like to refuse any more connection requests.

also the server only serves to connect to a single client. when the communication is done the server has to be restarted.

but from what i have read on the topic, it is not possible to close beginaccept.

i would like some ideas regarding how get around this situation.

+2  A: 

Normally, in the BeginAccept async callback you would call BeginAccept again so that another connection can be accepted. However, you can omit this step if you do not want to allow another connection. So that the connection is refused in a timely manner, consider also closing the listening socket in the callback. The accepted Socket will remain open in this case for you to use even though the listening socket is closed.

class SocketTest
{
    private Socket m_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    public void Test()
    {
        m_Listener.Bind(new IPEndPoint(IPAddress.Loopback, 8888));
        m_Listener.Listen(16);
        m_Listener.BeginAccept(AcceptCallback, null);
    }

    private void AcceptCallback(IAsyncResult ar)
    {
        Socket s = m_Listener.EndAccept(ar);
        m_Listener.Close();
        /* Use s here. */
    }
}
binarycoder
Perfect! thanks for helping me understand the scope of Asynchronous sockets.
iEisenhower