tote server prozesse aussortieren?

marcellus

marcellus

Kaiser
Ich hab ehrlichgesagt nicht viel davon selber geschrieben sondern von linux-unix-programmieren übernommen (http://www.pronix.de/pronix-275.html ff)

Ich hab allerdings etwas geändert und zwar wollte ich das nur der client an den server daten schickt und die dann geloggt werden.

Ich hab mir überlegt ich lass den server socket horchen und jedesmal wenn wer anklopft fork ich einen neuen prozess, der sich dann um einen client kümmert. Hat auch recht toll funktioniert, sogar mit mehreren clients und beendet sich alles wies soll, nur wenn ich dem client sigint (strg+c) schick beendet sich der client und der server child prozess hackelt sich dumm und dämlich.

Ich hab auch schon anhand von dem buch probiert den sigint abzufangen, das hat allerdings nicht viel gebracht, der client läuft zwar weiter aber der server hängt sich auf.

Der Hund ist irgendwo hier begraben

...
43 do
44 {
45 size = recv (new_socket, buffer, BUF-1, 0);
46 if( size > 0)
47 {
48 buffer[size] = '\0';
49 syslog(LOG_NOTICE, "message:%s\n", buffer);
50 }
51 } while (strcmp(buffer, "quit\n") != 0);
...

hier der source dazu

http://www.marcellus.arona.at/server-0.0.1.tar.gz
http://www.marcellus.arona.at/client-0.0.1.tar.gz

tia
 
Wenn der client den socket schliesst, gibt recv 0 zurück. Wenn ein unerwarteter Disconnect stattfindet, gibt recv -1 zurück und strerror(errno) liefert den Fehlerstring. Du kannst auch mittels setsockopt(...,SO_RCVTIMEO,...) gezielt einen Timeout setzen.

Damit sollte sich Dein Problem in den Griff bekommen lassen. Im Übrigen ist fork() ein sauteurer Systemruf. Nimm lieber die pthreads.

Alle Funktionen sind gut dokumentiert, z. B. auf opengroup.org
 
Zuletzt bearbeitet:
Ich weis, dass das mit fork nicht so optimal ist, aber ich wollt mich einfach mal durchs buch durchackern und statt stupid den code abzutippen hab ich mir gedacht ich kopiers raus und spiel dann einfach etwas damit herumzuspielen.

Bei den pthreads war ich noch nicht, die kommen in 2 kapiteln aber ich werd sie mir auf jeden fall geben.

Der server funktioniert mit dem test vom recv rückgabewert perfekt, vielen dank.
 

Ähnliche Themen

Server - Client Problem mit select()

Per Sockets ins IRC

socktprx.h , woher?

Zurück
Oben