WSAGETLASTROR () Devuelve 122
-
09-10-2019 - |
Pregunta
Bueno ... no estoy realmente seguro de lo que eso significa, pero mis sistemas se ejecutan, ejecutan y ejecutan sin llorar por un memeory insuficiente ...
Supongo que tiene que ver con el error del sistema 122, porque no hay 122 en los códigos de error Winsock (MSDN) ...
¿Alguien tiene una pista? ...
Ocurre en una llamada a getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)
EDITAR Muy bien ... aquí hay más código (que no se comenta, no tiene sentido también)
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;
El problema radica en mi g_acceptor_port_number, que es una clase que contiene
operator const char*()
{
std::stringstream ss;
ss << m_nPortNumber;
return ss.str().c_str();
}
¿Tengo que cambiar el operador de conversión? ... Preferiría usar este "stringint" para que no necesito guardar el número de puerto como cadena y número o convertirlo explícitamente ...
Solución
El problema es su implementación de operator const char*()
. Una vez que esa función regresa, su stringstream
El objeto ya no es válido porque ya no está en alcance.
Otros consejos
Probablemente un mal parámetro en el getaddrinfo
llamar. ¿Puedes publicar más código?
Escribir net helpmsg 122
en un símbolo del sistema y obtienes:
El área de datos pasada a una llamada del sistema es demasiado pequeña.
getaddrinfo
En realidad, devuelve un código de error, que debe probar con los valores especificados en el documentación de getAddrinfo
Lo más probable es que el tamaño de la variable pfinal sea demasiado pequeño. Deberá publicar más código para obtener una respuesta más completa.