I appreciate any comment on what is the problem with this code. I use it to receiving some information from some clients. The problem is that sometimes after receiving information it crashes with this error: "An existing connection was forcibly closed by the remote host".
public void StartReceiving()
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,m_listeningPort);
socketToListen = new Socket(ipep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socketToListen.Bind(ipep);
socketToListen.Listen(10);
socketToListen.BeginAccept(new AsyncCallback(LocalAcceptCallback),socketToListen);
}
private void LocalAcceptCallback(IAsyncResult iar)
{
socketToListen = (Socket)iar.AsyncState;
Socket clientConnected = socketToListen.EndAccept(iar);
ReceiveFromClient(clientConnected);
}
private void ReceiveFromClient(Socket s)
{
int total = 0;
int recv;
byte[] datasize = new byte[4];
recv = s.Receive(datasize, 0, 4, 0);
int size = BitConverter.ToInt32(datasize, 0);
int dataleft = size;
byte[] data = new byte[size];
while (total < size)
{
recv = s.Receive(data, total, dataleft, 0);
if (recv == 0)
{
break;
}
total += recv;
dataleft -= recv;
}
receiveCallback(data);
socketToListen.BeginAccept(new AsyncCallback(LocalAcceptCallback), socketToListen);
}