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 ...

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top