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 слишком мал. Вам нужно будет опубликовать больше кода, чтобы получить более подробный ответ.