WSAGetLastError() возвращает 122

Ну... я не совсем уверен, что это значит, но мои системы работают, работают и работают без плача о недостаточной памяти...

Я думаю, это связано с системной ошибкой 122, потому что в кодах ошибок winsock (MSDN) нет 122...

Кто-нибудь получил подсказку?...

Это происходит по вызову getaddrinfo(NULL, /*PortNumber*/, &hints, &pFinal)

РЕДАКТИРОВАТЬ хорошо... вот еще код (без комментария, тоже не имеет смысла)

            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;

Проблема заключается в моем g_ACCEPTOR_PORT_NUMBER, который является классом, содержащим

operator const char*()
    {
        std::stringstream ss;
        ss << m_nPortNumber;
        return ss.str().c_str();
    }

мне нужно изменить оператор преобразования?... Я бы предпочел использовать этот "STRINGINT", поэтому мне не нужно сохранять номер порта в виде строки и числа или преобразовывать его явно...

4 ответа

Решение

Проблема заключается в вашей реализации operator const char*(), Как только эта функция вернется, ваш stringstream Объект больше не действителен, потому что он больше не находится в области видимости.

Вероятно, плохой параметр на getaddrinfo вызов. Вы можете разместить больше кода?

Введите net helpmsg 122 в командной строке, и вы получите:

Область данных, переданная системному вызову, слишком мала.

getaddrinfo фактически возвращает код ошибки, который вы должны проверить по значениям, указанным в документации getaddrinfo.

Скорее всего, размер переменной pFinal слишком мал. Вам нужно будет опубликовать больше кода, чтобы получить более подробный ответ.

Другие вопросы по тегам