您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> IPv6下C++网络编程,getaddrinfo出错,求解决

IPv6下C++网络编程,getaddrinfo出错,求解决

来源:网络整理     时间:2016/7/28 5:48:32     关键词:

关于网友提出的“ IPv6下C++网络编程,getaddrinfo出错,求解决”问题疑问,本网通过在网上对“ IPv6下C++网络编程,getaddrinfo出错,求解决”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: IPv6下C++网络编程,getaddrinfo出错,求解决
描述:

我把代码简单描述一下


        memset(&rm_hints, 0, sizeof(rm_hints));
rm_hints.ai_family = AF_UNSPEC;
// rm_hints.ai_family = AF_INET6;
rm_hints.ai_socktype = SOCK_DGRAM;
rm_hints.ai_protocol = IPPROTO_UDP;
rm_hints.ai_flags = AI_CANONNAME;
// 解析远程IP地址
retVal = getaddrinfo(addr, TEXT_PORT, &rm_hints, &RemoteInfoText);

调试时候,总是有个Unhandled Exception : 0xC0000005 Aceess Violation.
其中我的 rm_hints 和 RemoteInfoText 是如下定义的。

struct addrinfo rm_hints;
struct addrinfo *RemoteInfoText = NULL, *RemoteInfoAudio = NULL;

在创建本地监听线程的时候,也用到了getaddrinfo(),没有错误,在解析远程地址时候,就出这个错误。头麻木了。。
求高手帮我讲解一下

解决方案1:


sockaddr_in6 看看你的头文件里定义的结构体大小是否为28,如果不是的话,那么就改成下面的方法吧。


sockaddr_in6 *recvAddr = (sockaddr_in6 *)new char[32];
int AddrLen = 32;
while(TRUE)
{
    Sleep(100);
//    DataLen = recvfrom(ListenText, m_prBuffer, 1024, 0, (sockaddr *)recvAddr, &AddrLen);
        ...
}

其它解决方法:把平台版本升高(在工程的所有include之前写。)

#ifndef WINVER                       
#define WINVER 0x0501           
#endif
#ifndef _WIN32_WINNT            
#define _WIN32_WINNT 0x0501     
#endif

旧版本的 sockaddr_in6 只有24字节,实际需要的是28字节。

以上介绍了“ IPv6下C++网络编程,getaddrinfo出错,求解决”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2980570.html

相关图片

相关文章