win32 ipv6 bind 10014问题
????? 這兩天實驗了一下,windows xp系統下的 ipv6 udp網絡通信。要在windows xp下測試ipv6,首先在命令行窗口下
執行?? ipv6 install? 和 net start tcpipv6 命令。
????? 在bind本地地址時,發現沒法使用? in6addr_any 這通配地址。即下面這種使用方式:
????? const struct in6_addr? in6addr_any = IN6ADDR_ANY_INIT;
????? struct sockaddr_in6? my_addr;
????? my_addr.sin6_family = AF_INET6;
????? my_addr.sin6_port = htons(8001);
????? my_addr.sin6_addr = in6addr_any;
????? bind(m_socket, (struct sockaddr*)&my_addr, sizeof(struct sockaddr_in6));
????? 用這種方式bind本地地址時總是錯誤,用GetLastError(),得到錯誤碼是10014,即”系統檢測到在一個調用中嘗試使用指針參數時的無效指針地址。
????? 只能用下面這種方式來實現
????? addrinfo hins, *res;
????? memset(&hins, 0, sizeof(hins));
????? hins.ai_family = AF_INET6;
????? hins.ai_socktype = SOCK_DGRAM;
????? hins.ai_protocol = IPPROTO_UDP;
????? hins.ai_flags = AI_PASSIVE;
????? getaddrinfo(NULL, "8001", &hins, &res);
????? m_socket = socket(res->ai_family, res->ai_socktype,res->ai_protocol);
????? bind(m_socket, res->ai_addr, res->ai_addrlen);
???? 但是在linux確可以使用in6addr_any這個地址。
?
總結
以上是生活随笔為你收集整理的win32 ipv6 bind 10014问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奔驰GLB新车高速失速趴窝!4S店:失速
- 下一篇: select EINTR