我从下面的代码中收到错误代码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();
你初始化SOCKADDR
错误:
strcpy_s(address.sa_data, "8.8.8.8");
- 这是错误。
真的SOCKADDR
只是占位符
使用 sockaddr 的 Winsock 函数不被严格解释为 指向 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();