Ciao a tutti, ho un problema con il codice.
allora, andrebbe anche bene da un certo punto di vista, ma no
Allora questo è uno stralcio di codice del server, fa le sue operazioni di bind e listen,
poi entra in un while(true) per fare l'accept e parte un thread.
Il thread ha un while che mi continua a ricevere quello che scrive l'utente (credo )
codice:
......
//Bind
//Listen
listen(serverfd , 5);
//Accept and incoming connection
c =sizeof(struct sockaddr_in) ;
//thread_id
pthread_t thread_id;
while( (clientfd = accept(serverfd, (struct sockaddr *)&client_addr, (socklen_t*)&c)) ){
puts("Connection accepted");
pthread_create( &thread_id , NULL , connection_handler , (void*) &clientfd);
puts("Handler assigned");
}//while
//Se scrivo qui non me lo legge, rimane nel while
return 0;
}
// funzione thread
void *connection_handler(void *serverfd)
{
int sock = *(int*)serverfd;
char msg[MSG_SIZE];
int read_size;
while( (read_size=recv(sock, msg, MSG_SIZE * sizeof(char), 0)) > 0 ){
printf("%s\n", msg);
bzero(&msg, MSG_SIZE * sizeof(char));
}//while
pthread_exit(NULL); //non sono sicuro serva
return 0;
}
Il codice funziona bene, infatti se apro anche più client poi me li vede entrambi e possono scrivere entrambi.
IL PROBLEMA:
per semplificare intanto cosi è solo il client che scrive e solo server legge.
Ora vorrei fare in modo che il server possa rispondere ai client (tutti possibilmente (ma ci penso anche dopo)) in maniera asincrona.
però cosi facendo non riesco a uscire dal while.. e il mio main resta inutilizzato, non so come poter riusare il main, o fare questa cosa, aprire un altro thread nel thread creato? come credo mi avevi suggerito.
Grazie