C Programm mit sockets und pthreads fehlertolerant machen ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
eszett
Beiträge: 33
Registriert: 07.07.2004 17:10:20

C Programm mit sockets und pthreads fehlertolerant machen ?

Beitrag von eszett » 08.03.2005 11:31:04

Hallo Leute,
ich bin auf der Suche nach Informationen wie ich eine socket-basierte Kommunikation (TCP/IP) fehlertoleranter machen kann. Das C Programm das ich geschrieben habe funktioniert zwar ganz prima, leider crasht es manchmal, wenn sich (einer) der Client(s) beendet. Außerdem friert die ganze Geschichte ein, wenn ich das Netzwerkkabel an einem Client ziehe, sowas muss es natürlich auch aushalten.
Kennt jemand von euch eine gute Quelle (ich kauf mir auch notfalls ein Buch...), wo ich mich in das Thema einlesen kann?

Viele Grüße, eszett

Benutzeravatar
eagle
Beiträge: 2282
Registriert: 05.11.2002 11:20:53
Wohnort: Berlin

Beitrag von eagle » 08.03.2005 11:50:54

Beej's Guide to Network Programming [1]. Speziell Kapitel 6.

eagle

[1] http://www.ecst.csuchico.edu/~beej/guide/net/html/
"I love deadlines. I love the whooshing sound they make as they fly by." -- Douglas Adams

eszett
Beiträge: 33
Registriert: 07.07.2004 17:10:20

so, serledigt

Beitrag von eszett » 08.03.2005 15:24:39

Danke vielmals,
die Webseite ist echt nicht schlecht, sollte man sich auf jedenfall mal durchlesen, wenn man was mit Sockets machen will, das vereinfacht die Sache dann doch ungemein.
Mein Problem hat sich sozusagen aufgelöst, nachdem ich mir mal select() genauer angeguckt habe. Im Endeffekt hatte es zwar nix mit der Netzwerkverbindung an sich zu tun (es war ein Deadlock, der beim Beenden einer Verbindung manchml entstand...)

viele Grüße, eszett

Benutzeravatar
devilx
Beiträge: 734
Registriert: 26.08.2003 22:57:20
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Filderstadt
Kontaktdaten:

Beitrag von devilx » 14.03.2005 16:42:26

Tipp am Rande: Vermeide um Gottes Willen libpthread! Wenn du unbedingt Threads brauchst, greife zu der GNet Library. Die pthread lib wird wirklich nur bei Programmen wie "WineX" (nun "Cedega") verwendet, da es keine andere Moeglichkeit gibt. Ueberall, wo du sie durch einen Layer oder gar durch Forks ersetzen kannst, solltest du dies auch tun.
When you smile, the world smiles with you :)
When you fart, you stand alone :(
... a place full of dorkness

eszett
Beiträge: 33
Registriert: 07.07.2004 17:10:20

pthreads

Beitrag von eszett » 14.03.2005 20:10:28

Naja, ich bin ja mit meinen PThreads nun auch nicht so 100% glücklich - wenn sich mir auch nicht erschließt, warum Du die libpthread so verteufelst - aber da das ganze auch noch teilweise harte Echtzeit mit RTAI/LXRT (http://www.rtai.org) ist, lässt es sich wirklich nicht vermeiden. :wink:

Grüße, eszett

P.S.: Mittlerweile läuft die Sache ja schön stabil...

Benutzeravatar
devilx
Beiträge: 734
Registriert: 26.08.2003 22:57:20
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Filderstadt
Kontaktdaten:

Beitrag von devilx » 15.03.2005 13:54:01

Warum ich sie verteufel? Nun, dafuer gibt es viele Gruende. Ich habe selber anfangs viel mit PThreads gearbeitet, da sie zugegebener Maßen einen gewissen Komfort gegenueber Forks bieten. Jedoch ist mir dabei aufgefallen, dass bei geringsten (unscheinbaren) Fehlern die VM Size des Programmes gewaltig in die Hoehe steigt. Zudem ist GTK beispielsweise nicht pthread sicher, mit dem GNet/GThread funktioniert eine GTK Anwendung jedoch problemlos, ohne irgendwelche Mutexes fuer den Interface-Zugriff o.ae. Diese Layer bieten ihmo sehr nuetzliche Zusatzfunktionen und enthalten solch schwachsinnige Funktionen wie pthread_cancel nicht.
Wie gesagt, es gibt viele Gruende PThreads nur im aeussersten Notfall zu benutzen. Es kommt eben ganz auf die Anwendung welche Threads erfordert an.
Dies aber nur als Tipp am Rande. :)
When you smile, the world smiles with you :)
When you fart, you stand alone :(
... a place full of dorkness

Antworten