MacApp in quel caso si, ma dopo alla funzione pthread_create(...) devo passare un void * che poi ridiventare param * come mi ha fatto vedere oregon 
Purtroppo ora è insorto un altro problema.
arg_ascolto->fdserver = fdg = 3
codice:
param *arg_ascolto = (param *)malloc(sizeof(param));
arg_ascolto->fdserver = fdgioco;
arg_ascolto->thread_id = (int *)tid; //---->>> verficare
pthread_t *tid_ascolto = crea_tid(1);
if( ( err = pthread_create(&tid_ascolto[0],NULL,ascolto,&arg_ascolto) ) != 0 )
{ printf("errore %s\n",strerror(err)); exit(1); }
nella funzione ascolta dopo aver fatto il cast:
codice:
param *arg = (param *)x;
int fdg = arg->fdserver;
pthread_t *tid = (pthread_t *)arg->thread_id;
fdg = arg->fdserver = 13452040
Cosa succede? in cosa sbaglio?
Grazie ancora dell'aiuto