Доброго времени, уважаемые форумчане!
Прошу помощи в следующем. Имеем "отладочное" приложение, которое содержит TServerSocket, работающий в неблокирующем режиме (stNonBlocking) и принимающий данные от кучи разных устройств/локальных клиентских программ и прочее. Все отлично работает, срабатывает событие OnClientRead(), выполняю обработку и, при необходимости, отправку данных при помощи SendText(). В случае, если данные были разбиты на части во время их передачи, OnClientRead() вызывается для каждой части по порядку и проблем тоже нет.
// при создании формы (службы)
FServerSocket := TServerSocket.Create(nil);
FServerSocket.OnClientError := OnError;
FServerSocket.OnClientRead := OnRead;
FServerSocket.OnClientDisconnect := OnDisconnect;
// при разрушении формы (службы)
for Index := 0 to FServerSocket.Socket.ActiveConnections - 1 do
FServerSocket.Socket.Connections[Index].Close;
FServerSocket.Close;
Затем, все это дело я оформил как службу - штатный TService. И появилась такая проблема - все работает примерно в течение часа, затем перестает работать. Служба запущена всегда, остановок и исключений нет. Сделал свой собственный простой и примитивный лог - вижу, что после определенного количества подключений (около 100 активных sockets) перестает срабатывать событие OnClientRead(). То есть, клиент подключается, подключение проходит, но событие уже не срабатывает. При перезапуске службы, разумеется, все начинает работать, опять-таки до поры до времени. Если кто сталкивался с чем-то подобным, пуду премного признателен.
Может быть, дело в том, что нельзя использовать stNonBlocking внутри службы? Программа была идеально отлажена именно в этом режиме работы сервера.