Wsagetlasterror () renvoie 122
-
09-10-2019 - |
Question
Eh bien .. je ne sais pas vraiment ce que cela signifie, mais mes systèmes s'exécutent et courent et courent sans pleurer pour Memeory insuffisant ...
Je suppose que cela a à voir avec l'erreur système 122, car il n'y a pas 122 dans les codes d'erreur Winsock (MSDN) ...
Quelqu'un a un indice? ...
Il se produit sur un appel à getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)
ÉDITER Très bien ... voici plus de code (sans qu'il ne soit pas commenté, je n'ai pas de sens aussi)
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;
Le problème réside dans mon g_acceptor_port_number, qui est une classe contenant
operator const char*()
{
std::stringstream ss;
ss << m_nPortNumber;
return ss.str().c_str();
}
Dois-je modifier l'opérateur de conversion? ... Je préfère utiliser ce "stringInt", donc je n'ai pas besoin d'enregistrer le numéro de port sous forme de chaîne et de numéro ou de le convertir explicitement ...
La solution
Le problème est votre implémentation de operator const char*()
. Une fois que cette fonction revient, votre stringstream
L'objet n'est plus valide car il n'est plus dans la portée.
Autres conseils
Probablement un mauvais paramètre sur le getaddrinfo
appel. Pouvez-vous publier plus de code?
Tapez net helpmsg 122
à une invite de commande et vous obtenez:
La zone de données transmise à un appel système est trop petite.
getaddrinfo
renvoie réellement un code d'erreur, que vous devez tester par rapport aux valeurs spécifiées dans le Documentation Getaddrinfo
Plus que probablement, la taille de la variable pfinale est trop petite. Vous devrez publier plus de code pour obtenir une réponse plus approfondie.