Dunque ho seguito il tuo suggerimento e ho modificato il file header.h inserendo il comando "errore = fcntl(sock,F_SETFL,O_NONBLOCK);" e il comando "pthread_join(IDthread1, NULL);" alla fine della funzione, ma nulla di nuovo.
inserendo il comando "pthread_join(IDthread1, NULL);" il thread funziona il multitasking ma la memoria viene allocata "male" come al solito.
Credo da aver fatto un errore nel dire che il comando "errore = fcntl(sock_fd,F_SETFL,O_NONBLOCK);" non conta, in realtà il programma da questo errore quando avvio la funzione:

codice:
Connection error: Operazione ora in corso
Dove devo mettere il comando "errore = fcntl(sock_fd,F_SETFL,O_NONBLOCK);", io l'ho messo subito dopo la creazione del socket e prima di fare la connessione.