Salve, sono arrivato all'esasperazione...ho provato di tutto..devo fare un client che allo stesso tempo sia anche un server. Mi spiego meglio, devo programmare una struttura p2p a directory centralizzata. Tutto bene fino ad ora, l'unico grande problema è che un generico client deve collegarsi al server per ricevere una lista di peer, e poi collegarsi a quesi peer per il download. Allo stesso modo voglio fare un menù al server per la gestione, mentre soddisfa le richieste ai vari client. Ho implementato la parte per soddisfare le richieste con il fork(), ogni volta che arriva una connessione crea un processo figlio che si occupa di soddisfare le richieste del client connesso. Tutto testato, tutto funzionante...bene...ora dove lo piazzo il menù? vi posto il codice del main del server dalla BIND. Mi occorre che un processo si occupa di gestire il menù, e un altro che stia sulla listen. Ditemi se vi occorrono altre info...grazieee milleeeeeee
// assegnamo al socket un processo tramite la funzione BIND
if (bind(sd, (struct sockaddr *)&server,sizeof(server)) < 0){//Assegno l'indirizzo alla socket
printf("Errore nella chiamata di sistema BIND!\n");
exit(-1);}
printf("Nome Server:%s IP Server:%s Porta:%d\n",host,inet_ntoa(**(struct in_addr**)ip_host->h_addr_list),ntohs(server.sin_port));
listen(sd, 100); // mettiamo il server in ascolto creando una coda di 100 connessioni
if (signal(SIGCHLD, sig_chld_handler) == SIG_ERR) {
fprintf(stderr, "errore in signal");
exit(1);}
while(1) {
len=sizeof(client);
if((temp_sd= accept(sd,(struct sockaddr *)&client, &len)) < 0) { //accetta la connessione
printf("Problemi di connessione con il peer:%s->Disconnesso\n",inet_ntoa(client.sin_addr));
exit(-1);}
//crea un processo che si occuperà della connessione
if ((pid = fork()) < 0) {
perror("Errore nella creazione di un processo figlio.\n");
exit(-1);}
if (pid == 0) { // è un processo figlio
if(close(sd)==-1){
printf("Errore in close");
exit(1);}
server_echo(temp_sd,client);}
else {
close(temp_sd);}}
exit(0);}