2009-10-16 6 views
0

Je ne connais pas vraiment les protocoles de connexion.C: obtention du nom d'hôte à partir du socket TCP et UDP?

J'utilise le code suivant pour examiner connect() pour que je puisse obtenir le nom d'hôte:

#ifndef NI_MAXHOST 
#define NI_MAXHOST 1025 
#endif 

int error; 

char hostname[NI_MAXHOST] = ""; 


error = getnameinfo(serv_addr, addrlen, hostname, NI_MAXHOST, NULL, 0, 0); 

if (error !=0) { 
    ALogTCP(@"coudldn't resolve hostname or internal connect"); 
    [pool release]; 
    return orig__connect(sockfd, serv_addr, addrlen); 
    } 


if (error == 0) { 
    ALogTCP(@"hostname: %s", hostname); 
    NSString *hostFirst = [NSString stringWithCString:hostname]; 
} 

puis-je utiliser le code « même » pour obtenir le nom d'hôte si je crochet dans sendto() (donc je peux examiner UDP)?

merci d'avance.

Répondre

1

Vous devriez être en mesure de le faire parce que sendto() est passé un struct sockaddr comme vous utilisez dans votre exemple de code.

Lorsque vous « crochet » sendto() Je suppose que vous allez le faire avec une macro qui affecte uniquement votre code source - par opposition à quelque chose comme un pilote servant d'intermédiaire.

La résolution de nom DNS dépend de l'envoi de paquets UDP, donc si vous deviez « crochet » sendto() à un niveau assez bas, votre solution récursion infinie car il leva les yeux vers les noms d'hôte pour les paquets de recherche DNS sortants ...

Questions connexes