Имеется сервер класса TcpListener. Он принимает входящие подключения методом BeginAcceptTcpClient (AsyncCallback, Object).
Код написан на основе примера с MSDN.
public static ManualResetEvent tcpClientConnected =
new ManualResetEvent(false);
public static void DoBeginAcceptTcpClient(TcpListener
listener)
{
while(true)
{
tcpClientConnected.Reset();
Console.WriteLine("Waiting for a connection...");
listener.BeginAcceptTcpClient(
new AsyncCallback(DoAcceptTcpClientCallback),
listener);
tcpClientConnected.WaitOne();
}
}
public static void DoAcceptTcpClientCallback(IAsyncResult ar)
{
TcpListener listener = (TcpListener) ar.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(ar);
Console.WriteLine("Client connected completed");
tcpClientConnected.Set();
while(thue)
{
//Прием сообщений от клиента
}
}
Проблема заключается в том, что метод DoAcceptTcpClientCallback(IAsyncResult ar) иногда начинает выполняться в текущем потоке, а не во вновь созданном как это обычно бывает, и тем самым блокирует его и из-за чего прием следующих подключений невозможен. Закономерность и причины проследить не удалось. В чем может быть дело?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости