Code d'erreur Winsock 10014
string SendRequestToServer(std::string url)
{
struct sockaddr_in addr = { 0 };
struct hostent *host = NULL;
//If the URL begins with http://, remove it.
if(url.find("http://") == 0)
url.erase(0, 7);
//Get the host name.
string hst = url.substr(0, url.find('/', 0));
url.erase(0, url.find("/", 0));
//Connect to the host.
host = gethostbyname(hst.c_str());
if(!host)
{
Print("%s", "Could not resolve the hostname.");
int error = WSAGetLastError();
return "failed";
}
}
Il semble que je suis de retour "échec" assez fréquemment. Voici les valeurs des différentes variables lorsque mon point d'arrêt à la "échec" est touché:
url: "/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32%5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c"
tvh: "bgfx.net"
de l'hôte: NULL
erreur: 10014
Ce qui se passe ici? Plus important encore, comment puis-je résoudre ce problème?
REMARQUE: Le paramètre initial pour SendRequestToServer est "bgfx.net/wowus/logger.cgi?data=%43%3a%5c%57%49%4e%44%4f%57%53%5c%53%79%73%74%65%6d%33%32%5c%6d%73%77%73%6f%63%6b%2e%64%6c%6c"
WSAStartup A été appelée avant cette.
OriginalL'auteur Clark Gaebel | 2009-05-14
Vous devez vous connecter pour publier un commentaire.
Certaines personnes WS peut échouer avec cette erreur si elle a obtenu le pointeur à l'intérieur de la pile d'application de la mémoire.
On dirait que vous êtes à l'aide de VS2005 ou plus récent où std::string a interne de 16 caractères tampon - et c'est exactement cette adresse de mémoire tampon a été adoptée en gethostbyname().
Essayez de copier votre chaîne tas avant de passer à WS:
Et laissez-nous savoir, si il a aidé 🙂
char buf[256]
sur la pile. Pour Google: 10014 = WSAEFAULT.OriginalL'auteur Rageous
Erreur 10014 sera également retourné pour les adresses qui ne sont pas correctement alignés, même lorsque l'adresse est valide. Cela signifie que sur les systèmes 32 bits, les adresses doivent être des multiples de 4, et sur les systèmes 64 bits, ils doivent être des multiples de 8.
Le X86 et le X64 puces normalement tolère mal alignées structures avec une petite perte de performance, mais les appels de système d'exploitation comme TransmitPackets souvent ne le font pas.
J'ai découvert cela lors du débogage d'un TransmitPackets problème qui semble assez aléatoire. Mon problème est que le tas de l'allocateur j'ai écrit n'était pas toujours d'aligner les allocations sur la bonne limite. La fixation du tas allocateur elimininated les problèmes.
OriginalL'auteur Ron Murray
10014 est WSAEFAULT. Vous remarquerez à partir de la documentation que cela signifie que "Le nom de paramètre n'est pas valide de la part de l'utilisateur, l'adresse de l'espace".
Je voudrais vérifier que la tvh.c_str() est de retour.
OriginalL'auteur immibis