Почему я получаю 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();