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
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");
}
con telnel riesco a connettermi su questo server. Essendo sistemi distribuiti, sto coniugando socket C e thread linux in un sol colpo....
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