bind处一直报错WSAEADDRNOTAVAIL10049,不知道为什么?
|
|
win10, vs2015
1 #include <stdio.h> 2 #include <winsock2.h> 3 #include <ws2ipdef.h> 4 5 #pragma comment(lib, "ws2_32.lib") 6 7 #define BUF_SIZE 30 8 9 int main() 10 { 11 int iResult = 0; 12 WSADATA wsaData; 13 SOCKET sock; 14 char message[BUF_SIZE]; 15 int strlen; 16 int addrsize; 17 18 SOCKADDR_IN6 addrto, addrfrom; 19 20 iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); 21 22 sock = socket(AF_INET6, SOCK_RAW, 89); /*需要管理员权限*/ 23 if (sock == INVALID_SOCKET) 24 printf("sock err = %d\n", WSAGetLastError()); 25 26 addrto.sin6_family = AF_INET6; 27 addrto.sin6_addr.u.Byte[0] = 0xfc; 28 addrto.sin6_addr.u.Byte[1] = 0x00; 29 addrto.sin6_addr.u.Byte[2] = 0x00; 30 addrto.sin6_addr.u.Byte[3] = 0x00; 31 addrto.sin6_addr.u.Byte[4] = 0x00; 32 addrto.sin6_addr.u.Byte[5] = 0x00; 33 addrto.sin6_addr.u.Byte[6] = 0x0d; 34 addrto.sin6_addr.u.Byte[7] = 0x41; 35 addrto.sin6_addr.u.Byte[8] = 0x00; 36 addrto.sin6_addr.u.Byte[9] = 0x00; 37 addrto.sin6_addr.u.Byte[10] = 0x00; 38 addrto.sin6_addr.u.Byte[11] = 0x00; 39 addrto.sin6_addr.u.Byte[12] = 0x0d; 40 addrto.sin6_addr.u.Byte[13] = 0x41; 41 addrto.sin6_addr.u.Byte[14] = 0x00; 42 addrto.sin6_addr.u.Byte[15] = 0x02; 43 addrto.sin6_port = 89; 44 45 iResult = bind(sock, (SOCKADDR *)&addrto, sizeof(SOCKADDR_IN6)); 46 if (iResult == SOCKET_ERROR) 47 printf("bind err = %d\n", WSAGetLastError()); 48 49 while (1) 50 { 51 addrsize = sizeof(addrfrom); 52 strlen = recvfrom(sock, message, BUF_SIZE, 0, (SOCKADDR*)&addrfrom, &addrsize); 53 } 54 55 }