Questo e' il loop principale del server..
codice:
while (TRUE)
{
/* leggo dalla pipe con id fifo aperta in precedenza*/
while((letto = read(fifo,msg,MAXDIM)) > 0)
{
printf("RICEZIONE --> %s\n",msg);
if(strstr(msg,"CONNECT")!= NULL)
{
if((sscanf(msg,"%d CONNECT %s",&p,&nome_u))== 2)
{
if(chdir("..")== -1)
{
perror("Nella chdir");
exit(errno);
}
/* apro la pipe serverclientPID per spedire la risposta positiva al client */
sprintf(serverclient,"serverclient%d%c",p,SZ);
fifo_client = apri_pipe(serverclient,O_RDWR);
/* mi risposto dentro nmat_data */
if(chdir("./nmat_data")== -1)
{
perror("Nella chdir");
exit(errno);
}
/* controlla che l'utente che ha fatto richiesta di connessione non sia gia' connesso */
if((autorizzazione(&nome_u,users_list)== 0)||(controllo_accessi(&nome_u) == 0))
{
/* connessione non accettata */
fprintf(stderr,"Impossibile connettersi.\n** Utente non riconosciuto oppure gia' connesso **\n");
sprintf(ok,"%d KO%c",getpid(),SZ);
write(fifo_client,&ok,30);
/* se non ci sono gia' mi sposto nella directory principale */
if(chdir("..")== -1)
{
perror("Nella chdir");
exit(errno);
}
fclose(users_list);
close(fifo);
close(fifo_client);
unlink("clientserver");
exit(-1);
}
}
}
/* connessione accettata */
/* mi sposto nella directory principale */
if(chdir("..")== -1)
{
perror("Nella chdir");
exit(errno);
}
/* mando la risposta di ok al client per avvertire dell'avvenuta connessione */
sprintf(ok,"%d OK%c",getpid(),SZ);
write(fifo_client,&ok,30);
printf("OK:: %s\n",ok);
if((pid = fork()) == -1)
{
perror("Nella fork()\n");
exit(errno);
}
else if (pid == 0)
{
/* creazione della pipe clientserverpid */
sprintf(clientserver,"clientserver%d%c",p,SZ);
crea_pipe(clientserver);
/* apertura della pipe clientserverpid */
fifo_fi = apri_pipe(clientserver,O_RDONLY);
/* leggo dalla pipe il messaggio in arrivo */
while((letto = read(fifo_fi,&cosafare,MAXDIM)) > 0)
{
cosafare[letto] = SZ;
/* codice identifica un'operazione. A seconda del numero eseguo diversi comandi.
Ometto il tutto, ho gia' testato che non ha niente a che vedere col problema... */
codice = estrai_codice(cosafare);
if(codice == 1)
{
}
if (codice == 2)
{
}
if (codice == 3)
{
}
if (codice == 4)
{
}
if (codice == 6)
{
}
}
}
else
{
waitpid(pid,&status,0);
if (WIFEXITED(status))
printf("Utente %s terminato:: %d\n",&nome_u,WEXITSTATUS(status));
}
}
/* break;*/
/* FINE WHILE */
}