WsagetLasterror () restituisce 122
-
09-10-2019 - |
Domanda
Beh .. non sono davvero sicuro di cosa significhi, ma i miei sistemi funzionano, funzionano e funzionano senza piangere per una memica insufficiente ...
Immagino che abbia a che fare con l'errore di sistema 122, perché non c'è 122 nei codici di errore Winsock (MSDN) ...
Qualcuno ha un indizio? ...
Si verifica in una chiamata a getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)
MODIFICARE Va bene ... ecco più codice (non averlo commentato, non ha anche senso)
addrinfo hints, *pFinal = nullptr;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET;
if(getaddrinfo(NULL, g_ACCEPTOR_PORT_NUMBER, &hints, &pFinal))
return ERROR_BIND_SOCKET;
Il problema risiede nel mio g_acceptor_port_number, che è una classe contenente
operator const char*()
{
std::stringstream ss;
ss << m_nPortNumber;
return ss.str().c_str();
}
Devo cambiare l'operatore di conversione? ... Preferisco usare questo "StringInt", quindi non ho bisogno di salvare il numero di porta come stringa e numero o convertirlo esplicitamente ...
Soluzione
Il problema è l'implementazione di operator const char*()
. Una volta che quella funzione torna, il tuo stringstream
L'oggetto non è più valido perché non è più in portata.
Altri suggerimenti
Probabilmente un cattivo parametro sul getaddrinfo
chiamata. Puoi pubblicare più codice?
Digitare net helpmsg 122
in un prompt dei comandi e ottieni:
L'area dati passata a una chiamata di sistema è troppo piccola.
getaddrinfo
restituisce effettivamente un codice di errore, che è necessario testare i valori specificati in Documentazione getAddRinfo
Molto probabilmente, la dimensione della variabile pfinale è troppo piccola. Dovrai pubblicare più codice per ottenere una risposta più approfondita.