Почему я получаю 67 код из метода QOSStartTrackingClient?

Я получаю код ошибки 67 из кода ниже, что означает ERROR_BAD_NET_NAME,

Почему это происходит? Как я могу это исправить?

SOCKADDR address;
strcpy_s(address.sa_data, "8.8.8.8");
address.sa_family = AF_INET;

if (!QOSStartTrackingClient(QoSHandle, &address, 0))
    cout << GetLastError();

1 ответ

Решение

Вы инициализируете SOCKADDR неправильно:

strcpy_s(address.sa_data, "8.8.8.8"); - это ошибка.

действительно SOCKADDR только местный держатель

Функции Winsock, использующие sockaddr, строго не интерпретируются как указатели на структуру sockaddr. Структура интерпретируется по-разному в контексте разных семейств адресов. Единственными требованиями является то, что первый u_short - это семейство адресов, а общий размер буфера памяти в байтах - namelen.

и отсюда

Чтобы фактически заполнить значения для каждой части адреса, вы используете структуру данных SOCKADDR_IN, которая специально предназначена для этого формата адреса. Структуры данных SOCKADDR и SOCKADDR_IN имеют одинаковый размер. Вы просто применяете для переключения между двумя типами структуры.

в вашем случае вам нужно использовать SOCKADDR_IN

    SOCKADDR_IN sa = { AF_INET };
    sa.sin_addr.s_addr = inet_addr("8.8.8.8");
    if (!QOSStartTrackingClient(QoSHandle, (SOCKADDR*)&sa, 0))
        cout << GetLastError();
Другие вопросы по тегам