PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Sockets werden nicht mehr geschlossen



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

paines
30-08-2004, 22:52
hab ich ne Antwort.

Unter Unix ist so ziemlich alles eine Datei. Und davon kannst du auch gleichzeitg nur eine begrnzte Anzhalt geöffnet haben. Genauso ist es mit Sockets, Files, Pipes usw.

Finde raus ob dies der Fall ist.

Das geht entweder per ulimit oder übers /proc FS.

Gruss
paines