【发布时间】:2016-07-19 12:19:17
【问题描述】:
我正在通过查看 Microsoft Visual Basic 2013 中工作包嗅探器的代码来学习 c 中的网络。
下面的代码创建了一个指向hostent结构的指针,获取localhost主机名,并将其加载到名为hostent结构的hostent结构中 em>本地。
struct hostent *local;
gethostname(hostname, sizeof(hostname))
local = gethostbyname(hostname);
下一部分使地址以点分十进制形式打印。
for (i = 0; local->h_addr_list[i] != 0; ++i)
{
memcpy(&addr, local->h_addr_list[i], sizeof(struct in_addr));
printf(" Interface Number : %d Address : %s\n",i,inet_ntoa(addr));
}
现在,我想了解这一切是如何运作的以及更多。 . .
假设我想了解 inet_ntoa(),我右键单击并选择 Go To Definition 或 Go To Declaration,它会将我发送到 WinSock2.h 表明:
inet_ntoa(
__in struct in_addr in
);
这似乎是向我显示参数,而不是函数的工作原理或返回值。这意味着我必须参考 MSDN 以了解每次发生的情况。
我的问题是:读取正在发生的事情的代码在哪里,所以我不必使用文档?
例如inet_ntoa函数内容在哪里?
【问题讨论】:
-
inet_ntoa在系统 DLL 中实现,特别是Ws2_32.dll。没有可用的 Microsoft 源。您将能够找到可用于其他平台的开源实现。 Linux 文档在这里linux.die.net/man/3/inet_ntoa -
这在很多c库中都有实现,例如glibc实现了它,你可以阅读它的代码,因为你可以下载整个glibc .它肯定没有在头文件中实现。
-
这是来自 WinSock2.h 的 full 引用吗?因为函数声明似乎缺少返回类型,这根本不应该工作。
标签: c++ c visual-studio-2013 header-files msdn