- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 UNIX NETWORK PROGRAMMING,想出了一个关于练习 11.4 的问题,以支持 gethostbyname
的代码用于 IPv6。书中的答案如下:
#include "unp.h"
int
main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
struct sockaddr_in6 servaddr6;
struct sockaddr *sa;
socklen_t salen;
struct in_addr **pptr;
struct hostent *hp;
struct servent *sp;
if (argc != 3)
err_quit("usage: daytimetcpcli3 <hostname> <service>");
if ( (hp = gethostbyname(argv[1])) == NULL)
err_quit("hostname error for %s: %s", argv[1], hstrerror(h_errno));
if ( (sp = getservbyname(argv[2], "tcp")) == NULL)
err_quit("getservbyname error for %s", argv[2]);
pptr = (struct in_addr **) hp->h_addr_list;
for ( ; *pptr != NULL; pptr++) {
sockfd = Socket(hp->h_addrtype, SOCK_STREAM, 0);
if (hp->h_addrtype == AF_INET) {
sa = (SA *) &servaddr;
salen = sizeof(servaddr);
} else if (hp->h_addrtype == AF_INET6) {
sa = (SA *) &servaddr6;
salen = sizeof(servaddr6);
} else
err_quit("unknown addrtype %d", hp->h_addrtype);
bzero(sa, salen);
sa->sa_family = hp->h_addrtype;
sock_set_port(sa, salen, sp->s_port);
sock_set_addr(sa, salen, *pptr);
printf("trying %s\n", Sock_ntop(sa, salen));
if (connect(sockfd, sa, salen) == 0)
break; /* success */
err_ret("connect error");
close(sockfd);
}
if (*pptr == NULL)
err_quit("unable to connect");
while ( (n = Read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = 0; /* null terminate */
Fputs(recvline, stdout);
}
exit(0);
}
根据书籍和其他资源的信息,我发现gethostbyname
不能返回IPv6。所以我的问题是 gethostbyname
是否可以返回有关 IPV6 的信息,或者只是代码错误?
我觉得这题不是要替换gethostbyname
,我想知道这段代码的正确性。
最佳答案
gethostbyname()
不再是(当前)POSIX(IEEE Std 1003.1-2008,2016 版)的一部分。
The obsolescent h_errno external integer, and the obsolescent gethostbyaddr() and gethostbyname() functions are removed, along with the HOST_NOT_FOUND, NO_DATA, NO_RECOVERY, and TRY_AGAIN macros.
最后一个支持 gethostbyname()
的 POSIX 版本是 IEEE Std 1003.1, 2004 Edition, which states :
struct hostent *gethostbyname(const char *name);
[...]
The gethostbyname() function shall return an entry containing addresses of address family AF_INET for the host with name name.
它根本没有提到 AF_INET6
。
所以从 POSIX 的角度来看你的问题是关于
the correctness of this code.
可以这样回答:
AF_INET6
).gethostbyname()
已从 POSIX 中删除。关于gethostbyname() 可以返回 IPv6 地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45992814/
gethostbyname 在执行 gethostbyname("www.google.com") 时有效,但执行如下操作时: char *name = "www.google.com"; get
我刚刚开始使用 C 进行编程。这应该是一个简单的程序,但我遇到了段错误。我将不胜感激任何帮助 问候, 胡安 #include #include #include #include #includ
我不明白错误信息。我试图做的是在将 mpich2 版本 1.4 或 1.5 安装到 /opt/mpich2 后运行 MPICH2 应用程序(两个版本都失败并出现相同的错误)。我的 MPI 应用程序是用
我研究了 GHOST 或 CVE-2015-0235 漏洞。我发现我的系统很脆弱。我写了一个测试程序来看看效果。但我什么也看不见。听到的是我的尝试: user@debian:~$ uname
当我必须向服务器发送套接字时,我正在用 C 语言编写第一个客户端。当我尝试获取它的地址时,我得到一个 Resource temporarily unavailable 我找不到导致此问题的原因。 da
我正在尝试从给定域接收 IP 地址。域名从客户端发送到本地服务器,在服务器中我需要找到 IP。 这是我的代码: int hostname_to_ip(char * hostname, char* ip
我正在用 C 语言编写一个基本的代理服务器。 我正在使用firefox进行测试,并且我已经让服务器成功接收了浏览器的请求。 但现在我需要将它们发送到互联网以获取浏览器想要的页面,而我很犹豫。 这是我目
这段代码第一次进入循环时运行完美,第二次给出 get seg 错误,如果我运行程序..退出..再次运行,它运行完美也是 if ((server=gethostbyname(HOSTA))==NULL)
我正在尝试查找源的 IP,但它不起作用。 void getSourceIp(struct hostent *sourceHost, struct ip *ipStruct) { char so
我正在尝试修改 Linux tracepath (traceroute) 程序以使其处理三个不同的 ip 地址。这三个 ip 地址是: "11.11.11.11"; "144.133.133.133"
我希望在我的 Suse m/c 中使用“gethostbyname”,但它没有返回任何结构。 但在其他系统上它工作正常我的 m/c 可能有什么问题?? 最佳答案 请注意,新的实现方式是使用 getad
我正在以通常的方式使用 gethostbyname() 函数... iaHost.s_addr = inet_addr(lpServerName); if (iaHost.s_addr == INAD
当我在没有联网的NDK应用程序中调用gethostbyname时,我打开wifi开关,用同一个主机再次调用gethostbyname,仍然失败,h_errno = 2。 这是为什么以及如何避免。 最佳
#include #include #include #include int main(int argc, char** argv) { char *ptr, **pptr;
我正在编写一个程序来检查给定 url 或 ip 上的端口是否打开。为了获得给定 url 的 ip 地址,我使用了 gethostbyname()。当尝试查找本地主机的地址时,它会返回正确的值,但是,尝
我是 Internet 编程的新手,我正在尝试使用 gethostbyname() 函数。当我向 gethostbyname 函数输入诸如“www.yahoo.com”的字符串时,它工作正常,但是当我
有什么方法可以防止gethostbyname()函数在Linux上不读取nscd缓存吗? 最佳答案 在 gethostbyname() 之前调用 res_init()。好像还可以。 关于c++ - 强
我正在使用 gethostbyname() 获取应用程序中域的 IP 地址。 在某些情况下,还会检查无效地址,例如“50.9.49”。 echo gethostbyname('50.9.49'); /
我不能使用 gethostbyname 来获取主机的 IP 地址,这是一个已弃用的函数,在 Windows 上只用了 10% 的时间! 我无法通过其他方法找到任何足够的资源来使用其他函数查找主机的 I
网上查了dns gethostbyname改成gethostentry,修改了代码,为什么还是不能显示正常的ipv4地址?这是我的代码: string GetHostIP() {
我是一名优秀的程序员,十分优秀!