gpt4 book ai didi

c++ - 无法从 gethostname 访问 IP 地址的内存

转载 作者:行者123 更新时间:2023-11-28 07:43:49 25 4
gpt4 key购买 nike

我正在开发一个 After Effects 插件,我正在尝试集成 raknet,这是一个 C++ 网络库。当 raknet 库试图通过调用获取 ipv4 地址时

gethostbyname

然后它抛出错误访问冲突读取位置 0xFFFFFFFFFFFFFFFF

int idx=0;
char ac[ 80 ];
int err = gethostname( ac, sizeof( ac ) );
(void) err;
RakAssert(err != -1);

struct hostent *phe = gethostbyname( ac );

if ( phe == 0 )
{
RakAssert(phe!=0);
return ;
}
for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx )
{
if (phe->h_addr_list[ idx ] == 0)
break;

memcpy(&addresses[idx].address.addr4.sin_addr,phe->h_addr_list[ idx ], sizeof(struct in_addr));
}

while (idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS)
{
addresses[idx]=UNASSIGNED_SYSTEM_ADDRESS;
idx++;
}

这是我看到的一些照片。

http://jacobsgriffith.com/stackoverflow/noaccesserror.png

我读过这篇文章,看起来图书馆没有错误地实现它。 Microsoft Documentation On gethostbyname

当我将鼠标悬停在 h_addr_list 和 h_aliases 上时,我得到了。

http://jacobsgriffith.com/stackoverflow/noaccess.jpg

有人有什么想法吗?为什么会失败我很确定这是一个常见的功能。

另外,winsock和winsock2的gethostbyname函数的实现有什么不同吗?

最佳答案

令我感到惊讶的是 Windows 实现不是线程安全的,而且每个主机都使用线程本地存储。但无论如何……

只需使用 getaddrinfo来解析主机名。它是线程安全的,旨在替代 gethostname。

但您的最终目标是枚举盒子上的本地 IP 地址。在这种情况下,只需使用 getifaddrs在 UNIX 上和 GetAdaptersInfo and GetAdatperAddresses 的组合在 Windows 上枚举本地 IP 地址。您还可以使用 SIO_ADDRESS_LIST_QUERY ioctl在 Windows 上使用虚拟套接字。

关于c++ - 无法从 gethostname 访问 IP 地址的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15264622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com