Così, non mi pare ci siano errori...ma visto che il codice non è completo non posso aiutarti più di tanto
Quello che posso consigliarti è di mettere delle printf() (soprattutto prima/dopo le recv/write) per vedere il flusso di esecuzione.
PS:
codice:
void * thr_reader(void * argv)
{
buffer = (msg_t *) malloc(sizeof(msg_t));
buff_rd = calloc (256, sizeof(char));
while(go)
{
....
buffer = (msg_t *) malloc(sizeof(msg_t));
}
return NULL;
}
Attenzione che allochi ad ogni ciclo della memoria, ma non la liberi. Se per caso lo fai nel codice omesso, ignora questo PS