Senza l'header non lo posso compilare; comunque ci sono dei possibili buffer overflow. Inoltre codici di questo tipo
sprintf(remote_host_name,"%s",remote->h_name);
if(strcmp(local->h_name, remote_host_name)==0)
sono sbagliati, in quanto local->h_name, remore->h_name anche se è sono char *
non puntano ad una stringa, ma ad un semplice elenco di byte (char è anche un intero con segno a 1 byte). Visto che "%s" o strcmp si aspettano di trovare un "fine stringa", ecco un altro bel buffer overflow.
nb per il debug
non usare printf, ma fprintf(stderr, ...) in quanto la printf è bufferizzata e potresti perdere dei messaggi in presenza di un segmentation fault

Non vorrei infatti che l'errore è proprio nelle righe che ti ho indicato. Controlla anche i malloc precedenti, sono forse un pò troppo "ottimisti".