Вопрос

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

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

У кого-нибудь есть подсказка? ...

Это происходит на звонке 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», поэтому мне не нужно сохранять номер порта как строка и номер, либо конвертировать его прямо ...

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top