PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/UNIX] Sockets und Signale



Cypher
06-07-2007, 02:43
hi,
ich bin gerade etwas am rumprobieren und würde gerne ein kleines chatprogramm schreiben.
der benutzer soll jederzeit etwas eingeben können, aber sobald etwas empfangen wird soll es ausgegeben werden.

ich habe versucht das mit einem child prozess zu realisieren, der die ganze zeit mit recv auf eingehende daten wartet, und dem parent prozess, der mit gets darauf wartet, dass der benutzer etwas eingibt.

das hat allerdings nicht wirklich geklappt... (da ist das programm: http://cypher.xail.net/more/test.c ist nur kurz ;-)

gibt es irgendwelche eleganteren methoden sowas in c zu realisieren?
ich dachte da an irgendeine möglichkeit mit signalen oder sowas, aber hab nix dazu gefunden...
achso die ganze sache sollter keine zusätzlichen bibliotheken oder sowas brauchen (das wär ja langweilig ^^), nur posix-konformer kram :D

mfg, cypher

rgubatz
06-07-2007, 07:03
Also mit einem [Prozess|Thread] wird das nur funktionieren, wenn du fgets selber implementierst und mit select(); abhorchst ob jeweils Daten anliegen und dementsprechend handelst. Deine "fgets" Funktion darf also nicht blockieren.

Hier nochmal ein schönes Beispiel eines IRC-Servers der mit select(); arbeitet: http://www.c-worker.ch/tuts/select.php

Cypher
06-07-2007, 11:33
also würde ich mit select stdin und eben den netzwerk-socket überwachen und
dann je nachdem wo was kommt reagieren?
und wie kann ich stdin als socket verwenden?

thx, cypher

/edit: hab für meine zweite frage schon eine lösung gefunden :-)
"man fileno()"

/edit2: *erledigt*

/edit3: wie bekomm ich nach einem select heraus, welches denn jetzt der socket ist, von dem ich lesen kann? select gibt zwar zurück der wievielte es ist, aber das bringt mir ja erst mal nix
im prinzip such ich nach einer möglichkeit wie:

id = select(..., liste, ...);
socket = socketVonSelectRueckgabe(id);