Zum Inhalt springen

problem mit fork()...


sAuRoN3000

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...