you initialize SOCKADDR
wrong :
strcpy_s(address.sa_data, "8.8.8.8");
- this is mistake.
really SOCKADDR
is only place holder
Winsock functions using sockaddr are not strictly interpreted to be
pointers to a sockaddr structure. The structure is interpreted
differently in the context of different address families. The only
requirements are that the first u_short is the address family and the
total size of the memory buffer in bytes is namelen.
and from here
To actually fill in values for each part of an address, you use the
SOCKADDR_IN data structure, which is specifically for this address
format. The SOCKADDR and the SOCKADDR_IN data structures are the same
size. You simply cast to switch between the two structure types.
in your case you need use 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();