zeeman
07-08-2004, 20:17
Also:
Mein Programm startet, beantwortet auch die Anfragen korrekt über den Socket.
Das Problem ist, nach ca. 100 Abfragen kann das Programm keine neuen Sockets mehr anlegen. ("cannot accept connection")
Anscheinend werden die alten nie geschlossen.
Jemand ne Idee warum?
listenSocket = create_socket();
//Und jetzt heißt es warten.....
while (1) {
cout << "Waiting for TCP connection..." << endl;
//Ein Client will was => Verbindung aufbauen
clientAddressLength = sizeof(clientAddress);
connectSocket = accept(listenSocket, (struct sockaddr *) &clientAddress, &clientAddressLength);
if (connectSocket < 0) {
//Fehlerbehandlung III
cerr << "cannot accept connection " << endl;
exit(1);
}
//Ne paar Infos fürs Syslog
cout << "connected to " << inet_ntoa(clientAddress.sin_addr) << endl;
memset(rawAntwort, 0x0, 128);
memset(rawAnfrage, 0x0, 129);
while (recv(connectSocket, rawAnfrage, 128, 0) > 0) {
//Damit man was mit der Anfrage auch anfangen kann
Anfrage = rawAnfrage;
cout << "Query: " << Anfrage << endl;
//Nun schaun wir mal was der Client wissen will:
if (Anfrage == "get_cpu_load") {
Antwort = get_cpu_load();
}
[noch mehr else ifs]
else {
Antwort = "unrecognize command";
}
cout << "Answer: " << Antwort << endl;
//Antwort verträglich machen für send
for (i=0;i<=128;i++)
{
rawAntwort[i] = Antwort[i];
}
// Send converted line back to client.
if (send(connectSocket, rawAntwort, strlen(rawAntwort) + 1, 0) < 0) {
cerr << "Error: cannot send modified data" << endl; }
}
close(connectSocket);
}
Vielen Dank schonmal fürs Lesen
zeeman
Mein Programm startet, beantwortet auch die Anfragen korrekt über den Socket.
Das Problem ist, nach ca. 100 Abfragen kann das Programm keine neuen Sockets mehr anlegen. ("cannot accept connection")
Anscheinend werden die alten nie geschlossen.
Jemand ne Idee warum?
listenSocket = create_socket();
//Und jetzt heißt es warten.....
while (1) {
cout << "Waiting for TCP connection..." << endl;
//Ein Client will was => Verbindung aufbauen
clientAddressLength = sizeof(clientAddress);
connectSocket = accept(listenSocket, (struct sockaddr *) &clientAddress, &clientAddressLength);
if (connectSocket < 0) {
//Fehlerbehandlung III
cerr << "cannot accept connection " << endl;
exit(1);
}
//Ne paar Infos fürs Syslog
cout << "connected to " << inet_ntoa(clientAddress.sin_addr) << endl;
memset(rawAntwort, 0x0, 128);
memset(rawAnfrage, 0x0, 129);
while (recv(connectSocket, rawAnfrage, 128, 0) > 0) {
//Damit man was mit der Anfrage auch anfangen kann
Anfrage = rawAnfrage;
cout << "Query: " << Anfrage << endl;
//Nun schaun wir mal was der Client wissen will:
if (Anfrage == "get_cpu_load") {
Antwort = get_cpu_load();
}
[noch mehr else ifs]
else {
Antwort = "unrecognize command";
}
cout << "Answer: " << Antwort << endl;
//Antwort verträglich machen für send
for (i=0;i<=128;i++)
{
rawAntwort[i] = Antwort[i];
}
// Send converted line back to client.
if (send(connectSocket, rawAntwort, strlen(rawAntwort) + 1, 0) < 0) {
cerr << "Error: cannot send modified data" << endl; }
}
close(connectSocket);
}
Vielen Dank schonmal fürs Lesen
zeeman