‘inet_pton’: identifiant introuvable

J’essaie d’inclure le code suivant dans mon programme mais l’erreur (‘inet_pton’: identifiant introuvable) apparaîtra.

// IPv4: struct sockaddr_in ip4addr; int s; ip4addr.sin_family = AF_INET; ip4addr.sin_port = htons(3490); inet_pton(AF_INET, "10.0.0.1", &ip4addr.sin_addr); s = socket(PF_INET, SOCK_STREAM, 0); bind(s, (struct sockaddr*)&ip4addr, sizeof ip4addr); 

Sortie

  error C3861: 'inet_pton': identifier not found 

l’en-tête inclus

  #include  #include  #include "udpDefine.h" #include  

toute aide peut manquer certains en-têtes ou lib.

la fonction

 int inet_pton(int af, const char *src, void *dst); 

est déclaré dans le fichier d’en-tête:

 #include  

s’il s’agit de Windows (Vista ou version ultérieure), Winsock est compatible avec cette version ANSI:

 INT WSAAPI InetPton( _In_ INT Family, _In_ PCTSTR pszAddrSsortingng, _Out_ PVOID pAddrBuf ); 

essayez #include ajoutez Ws2_32.lib

Dans Windows XP (et versions ultérieures), vous pouvez utiliser ces fonctions:

 #include  #include  #include  #include  #include  int inet_pton(int af, const char *src, void *dst) { struct sockaddr_storage ss; int size = sizeof(ss); char src_copy[INET6_ADDRSTRLEN+1]; ZeroMemory(&ss, sizeof(ss)); /* stupid non-const API */ strncpy (src_copy, src, INET6_ADDRSTRLEN+1); src_copy[INET6_ADDRSTRLEN] = 0; if (WSASsortingngToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) { switch(af) { case AF_INET: *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr; return 1; case AF_INET6: *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr; return 1; } } return 0; } const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) { struct sockaddr_storage ss; unsigned long s = size; ZeroMemory(&ss, sizeof(ss)); ss.ss_family = af; switch(af) { case AF_INET: ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; break; case AF_INET6: ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; break; default: return NULL; } /* cannot direclty use &size because of ssortingct aliasing rules */ return (WSAAddressToSsortingng((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)? dst : NULL; } 

Lien avec la bibliothèque ws2_32.

Dans mon cas, la fonction n’a pas pu être trouvée car il y avait un “#define WINVER 0x0502” dans un fichier d’en-tête.

Sur les systèmes Windows, la version 0x600 (= Vista) est la moins requirejse pour cette fonction.

Les utilisateurs de Windows peuvent également trouver la réponse ici:

https://msdn.microsoft.com/de-de/library/windows/desktop/cc805844(v=vs.85).aspx

Vous devez utiliser le fichier Ws2tcpip.h et append Ws2_32.lib à votre éditeur de liens.

Pour résoudre ce problème, ajoutez simplement ce qui suit à votre code après tout #include

 #pragma comment(lib, "ws2_32.lib")