ciao a tutti,
seguo il corso di sistemi distribuiti nella mia università e non riesco a creare un thread linux. Ma a me il codice pare a prova di imbecille (ovvero me), ma intanto non va!
Posto tutti il codice
con telnel riesco a connettermi su questo server. Essendo sistemi distribuiti, sto coniugando socket C e thread linux in un sol colpo....codice:struct InetClient { int socket; struct sockaddr_in address; int addressLength; }; void ClientLister (void * ); int main(int argc, char** argv) { int serverSocket,clientAddrLength; struct sockaddr_in qualsiasi, clientAddr; qualsiasi.sin_family = AF_INET; qualsiasi.sin_port = htons(4000); qualsiasi.sin_addr.s_addr = INADDR_ANY; serverSocket = socket(PF_INET, SOCK_STREAM, 0); bind(serverSocket, (struct sockaddr *)&qualsiasi, sizeof ( qualsiasi)); listen(serverSocket,0); while (1) { clientAddrLength = sizeof(struct sockaddr_in); printf("Waiting for client...\n"); int clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddr, &clientAddrLength); printf("Client connected\n"); struct InetClient * client = (struct InetClient*) malloc(sizeof(struct InetClient*)); client->socket = clientSocket; client->address = clientAddr; client->addressLength = clientAddrLength; pthread_t *nuovoThread = (pthread_t*)malloc(sizeof(pthread_t)); pthread_create(nuovoThread,NULL,(void*)&ClientLister,(void*)&client); } return 0; } void ClientLister(void * arg) { struct InetClient client = *((struct InetClient *) arg); printf("Eccomi qua"); }
l'output aspettato da questo programma è qualcosa tipo:
Waiting for a client...
Client connected
Waiting for a client...
Eccomi qua
ma niente...sembra che il thread non parta, anzi non parte proprio...
Ho provato a fare una join, ma non parte ugualmente e la join non esulerebbe dal mio scopo...
cosa sbaglio?
Socket problemi non ne danno e la creazione dei thread non prende più di 2 righe di codice, ma intanto non va...
suggerimenti?
vi ringrazio anticipatamente

Rispondi quotando