Domanda

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";
}
}

Sembra sto tornando "fallito" abbastanza frequentemente. Ecco i valori delle diverse variabili quando il mio punto di interruzione al "ritorno non riuscita" viene colpito:

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% 63% 6f% 6b% 2e% 64% 6c 6c% "

HST: "bgfx.net"

host: NULL

errore: 10014

Che cosa sta succedendo qui? Ancora più importante, come posso risolvere il problema?

NOTA: il parametro originale per SendRequestToServer è "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% 63% 6f% 6b% 2e% 64% 6c 6c% "

WSAStartup è stato chiamato prima di questo.

È stato utile?

Soluzione

Alcune persone riferiscono che il prodotto WS può riuscire con questo errore se ottenuto puntatore all'interno della memoria stack di applicazioni.

Sembra che si sta utilizzando VS2005 o più recente in cui std :: string ha interno 16 caratteri lungo tampone -. Ed esattamente questo indirizzo del buffer è stata approvata in gethostbyname ()

Provare a copiare la stringa di heap prima di passarlo a WS:

char *hstSZ = new char[hst.size() + 1];
strcpy(hstSZ, hst.c_str();
host = gethostbyname(hstSZ);
delete[] hstSZ;

e farci sapere, se ha aiutato:)

Altri suggerimenti

10014 Errore verrà inoltre restituito per gli indirizzi che non sono allineate correttamente anche quando l'indirizzo è valido. Ciò significa che nei sistemi a 32 bit, gli indirizzi devono essere multipli di 4, e nei sistemi a 64 bit, essi devono essere multipli di 8.

I chip x86 e x64 normalmente tollerare strutture disallineati con una piccola penalizzazione delle prestazioni, ma il sistema operativo chiama come TransmitPackets spesso non lo fanno.

Ho scoperto questo durante il debug di un problema TransmitPackets che sembrava abbastanza casuale. Il mio problema era che l'allocatore mucchio ho scritto non sempre allineare gli stanziamenti sul confine corretta. Fissaggio l'allocatore mucchio elimininated i problemi.

10014 è WSAEFAULT. Si noterà dalla documentazione che questo significa "il parametro nome non è una parte valida dello spazio di indirizzamento dell'utente." Vorrei verificare ciò hst.c_str () sta tornando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top