sAuRoN3000 Geschrieben 26. August 2001 Teilen Geschrieben 26. August 2001 Hi Hab ein problem mit fork(). Hab ein prog geschrieben(einen server) der sobald ein client conneced einen child prozess starten soll der den client übernimmt und der parent prozess soll immer nur lauschen ob nicht eine anfrage von einem client kommt. Hab das mit fork so gelöst: Das ist jetzt nur ein ausschnitt aus dem code(der der den fork ausführt und noch die schleife dazu) for(; { printf("In der FOR schleife\n"); cli_size =sizeof(cli); c=accept(s,(sockaddr*)&cli, &cli_size); if (c== -1) { perror("accept() failed"); return 5; } if(fork()==0) // Wenn ich child bin dann... { printf("FORK == 0\n"); printf("client from %s\n",inet_ntoa(cli.sin_addr)); if(handling(c) == -1) { printf("handling() failed"); }//if close(c); }//if else // Ich bin parent { printf("FORK != 0\n"); close(c); }//else return 0; }//for [/code] Wie ihr seht wird wenn man child ist die funktion handling() aufgerufen... Glaub zwar nicht das hier der fehler liegt aber trozdem mal der code: [code] int handling(int c) { printf("HANDLING WIRD GESTARTED\n"); char buffer[BUFFER_SIZE], name[BUFFER_SIZE]; int bytes; FILE *stream; strcpy(buffer, "Your Data: "); bytes= send(c,buffer, strlen(buffer), 0); if (bytes == -1) return -1; bytes=recv(c,data,sizeof(data),0); if (bytes==-1) return -1; data[bytes] = '\0'; if((stream=fopen("DATEN","a+")) == NULL) { if((stream=fopen("DATEN","w+")) == NULL) { sprintf(buffer,"Error while writing Data in File\r\n"); bytes=send(c,buffer,strlen(buffer),0); }//if else { sprintf(buffer,"Created file and wrote data in it\r\n"); bytes=send(c,buffer,strlen(buffer),0); fclose(stream); k//else }//if else { fprintf(stream,data); fclose(stream); sprintf(buffer,"Wrote data in existing file\r\n"); bytes=send(c,buffer,strlen(buffer),0); if (bytes==-1) return -1; }//else return 0; }//handling Jetzt mal eine gnaue problembeschreibung: Server started ganz normal. Client connected. ich bekomm die meldung fork==0 und fork!=0 also hab ich nen parent und nen schild prozess. Aber sobald das handling gestarted wird schließt sich ein prozess(der parent warscheinlich) und ich kehre in die konsole zurück. Ich kann dennoch noch daten mit dem client schicken und diese werden auch in das file geschrieben. Sobald die daten gesendet sind diesconnecred der client und der destruktor des child prozesses wird aufgerufen. Jetzt befindet sich das prog in einer endlosschliefe oder hat sich aufgehängt jedenfalls läüft irgendwas aber ich kann nichtmehr connecten. Hoffe ihr könnt mir helfen denn ich ärgere mich schon seit 3 tagen mit dem fork herum und versteh nicht warum er den parent prozess beendet.Hab auch schon in diesem(und anderen) foren was zu fork() gesucht aber nichts gefunden das mein problem erklären würde. mfg sAuRoN Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 27. August 2001 Teilen Geschrieben 27. August 2001 Das ist nicht wirklich eine Schleife, weil auf jeden Fall nach dem ersten Lauf return 0 ausgeführt wird. Sollte vielleicht nur der Child-Prozess das return 0 machen, und der Parent-Prozess in der Schleife bleiben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.