wie nahezu endlos senden und gleichzeitig empfangen?
-
ich moechte einen server schreiben, der auf anfrage nahezu endlosdaten schickt, bis der client nicht mehr will bzw. andere daten haben moechte. der server soll mehrere clients bedienen. (also aehnlich einem ftp-server)
zur realisierung dachte ich an select() und ein FD_SET.
im fd_set warte ich auf eingehende nachrichten bzw. neue verbindungsanfragen.jedoch:
wenn ich mit send() dauernd daten schicken muss, aber auf der anderen seite mit select() warte, ob ein eingehendes ereigniss stattgefunden hat, bin ich erstmal ratlos wie ich das umsetze.nun kann man select() auch mit timeout aufrufen. d.h select() -> warte x ms -> sende -> loop ,aber dadurch verschenke ich zeit die ich zum senden nutzen kann.
deshalb dachte an recv() non-blocking und pollen in einer while schleife - finde ich aber auch nicht schoen.
das ganze in einen thread oder einen prozess ( fork() ) z packen, ist auch keine loesung, da ich auch hier auf eingehende ereignisse reagieren muss.
oder man erstellt einen send-process/thread und steuert den per signal/pipe/shm aus dem receive thread/process - ist aber auch aufwendig.geht das nicht eleganter?
-
Also forken fuer die einzelnen Clients wuerde ich auf jeden Fall machen. Darueber hinaus koenntest du doch jeweils einen Datenblock senden, per select (ohne Timeout, also sofortige Wiederkehr) fragen ob was zum empfangen da ist, und nur in dem Fall das sendne unterbrechen. So in dieser Art (Pseudocode):
while (1) { send(datenblock); select(socket); if (socket.hasIncoming) { // Behanldung von Anfragen } }