Hard Turner
Hard Turner

Reputation: 55

C# Async Sockets Concept

This is my listening function and connection function

Socket Listen

public void Listen(){
IPEndPoint ep = new IPEndPoint(IPAddress.Any, PortNumber);
Listen.Bind(ep);
Listen.Listen(10);
Listen.BeginAccept(new AsyncCallback(NewConnection), null);}

public void NewConnection(IAsyncResult asyn)
{
    Socket Accepted = Listen.EndAccept(asyn);
    Listen.BeginAccept(new AsyncCallback(NewConnection), null);
    SomeFunction(Accepted);
}

the code works fine and there is no problem - I traced the code to see how to work with different clients and I understand the flow. However, I don't understand how can 1 socket serve different clients. Does it time multiplex between the clients over the socket?

I read on MSDN that Accepted in my code can be only used for the established connection and can't be used any further - that part I don't understand. What actually happens when the client tries to connect to the server socket? Does EndAccept return a totally different socket with different port to establish the connection and keep listening with the same socket to accept more requests at the same time?

Upvotes: 1

Views: 538

Answers (1)

mztan
mztan

Reputation: 305

What you've said is basically correct, based on my understanding. The Accepted socket is not the same as Listen. After you EndAccept, you can kick off another BeginAccept async call with your listen socket, and you can use the newly created socket to communicate with your remote peer.

To verify, you can check the local port of the listen socket and the connected socket; they should be different.

Upvotes: 1

Related Questions