Hi,
I’m having a strange problem with a simple web server using TcpListener.
The problem is that the server sometimes hangs on the line "listener.AcceptTcpClient();" The server could work fine for hours with a couple of connections/second but suddenly it just stops accepting connections. I have to stop the listener and restart the listener from another thread in order to get it to work again.
A bad solution is to stop and start the listener for every connection. This means that incoming connections during the stop/restart sequence is lost, right?
The problem is very sporadic and the server could work for hours and some times just a few minutes. I really need a robust solution that is fail safe.
Please give me some hints on what the problem could be.
Code snippet:
TcpListener listener = new TcpListener(IPAddress.Any, 8080);TcpClient tcpc;NetworkStream stream;
int numberOfBytesRead;String request;
listener.Start();
while(true){ try { tcpc = listener.AcceptTcpClient(); stream = tcpc.GetStream();
do { if(stream.CanRead) { numberOfBytesRead = stream.Read (temp, 0, temp.Length); request = String.Concat(request, Encoding.ASCII.GetString(temp, 0, numberOfBytesRead)); } }while(stream.DataAvailable && stream.CanRead);
stream.Close(); tcpc.Close();
// do stuff with request
}catch (Exception e) { try { stream.Close();} catch{} try { tcpc.Close();} catch{} }}