TTcpServer Problem
-
Ich habe ein TTcpServer ( mit Indy hab ich so a bissle Probleme bei Belastungstests des Servers [spontane Schutzverletzung,etc.]) , welcher auch bei lesen funktioniert.
Nur wenn der Client die Verbindung beendet, bekommt das der Thread net mit. (FClientSocket->Connected ist immer noch true)
Erst beim Programmbeenden wird der Thread beendet.
Hat jemand eine Ahnung wie man das Problem beheben kann.//--------------------------------------------------------------------------- __fastcall TTCPClientThread::TTCPClientThread(TServerSocketThread *ServerThread) : TClientSocketThread(ServerThread) { FServerThread=ServerThread; } //--------------------------------------------------------------------------- void __fastcall TTCPClientThread::Execute() { TCustomIpClient *FClientSocket; FClientSocket = new TCustomIpClient(NULL); if (FServerThread!=NULL) if (FServerThread->ServerSocket!=NULL) FServerThread->ServerSocket->Accept(FClientSocket); while (!Terminated) { try { ::Sleep(10); if (FClientSocket->WaitForData(1000)) // Sonst wartet er auf Daten, FDataStr=FClientSocket->Receiveln(); // und der Thread bleibt stehen else FDataStr=""; if (FDataStr.Length()>0) ;// spätere Weiterverwendung der gelesenen Daten } catch (Exception &e ) { delete FClientSocket;return;} if (!FClientSocket->Connected) break; } delete FClientSocket; } //---------------------------------------------------------------------------
TcpServer1 hat BlockMode == bmThreadBlocking
void __fastcall TForm1::TcpServer1GetThread(TObject *Sender, TClientSocketThread *&ClientSocketThread) { ClientSocketThread = new TTCPClientThread(TcpServer1->ServerSocketThread); }
-
Die Anzahl der aktiven Verbindungen überprüfst du?
-junix
-
Das Prob ist ich weiss net wo die Anzahl der geöffneten Verbindungen gespeichert ist.
es gibt einen Threadpool wo alle Threads aufgelistet sind.