gpt4 book ai didi

c - 套接字 - 在客户端使用 INADDR_ANY

转载 作者:IT王子 更新时间:2023-10-29 01:04:47 27 4
gpt4 key购买 nike

我最近遇到了 this blog post它描述了一个使用 libev 的 TCP 服务器客户端。服务器使用 INADDR_ANY 绑定(bind)到我熟悉的接口(interface)。但是,我很惊讶地在客户端代码中也看到了 INADDR_ANY。客户端代码上的相关代码如下:

// Create client socket
if( (sd = socket(PF_INET, SOCK_STREAM, 0)) < 0 )
{
perror("socket error");
return -1;
}

bzero(&addr, sizeof(addr));

addr.sin_family = AF_INET;
addr.sin_port = htons(PORT_NO);
addr.sin_addr.s_addr = htonl(INADDR_ANY);

// Connect to server socket
if(connect(sd, (struct sockaddr *)&addr, sizeof addr) < 0)
{
perror("Connect error");
return -1;
}

我特别感兴趣的是:

addr.sin_addr.s_addr = htonl(INADDR_ANY);

在服务器端,我知道 INADDR_ANY 会将端口绑定(bind)到所有可用接口(interface),但我不确定这在客户端有何意义。最后,客户端将需要在特定接口(interface)上进行连接。以前我总是指定 IP 地址或使用 INADDR_LOOPBACK

The Linux IP man page没有谈论在客户端使用 INADDR_ANY。我确实找到了 another Stack Overflow post here它说 OP 应该在客户端使用 INADDR_ANY,但没有给出任何理由或解释。

那么这到底在做什么呢?它是否尝试所有接口(interface),直到找到一个端口可用于连接?这是按什么顺序发生的?

感谢您的回答!

最佳答案

这是 nos 在评论中提供的答案。如果nos回来发布它作为答案,我会把nos的帖子标记为答案并删除这个。

INADDR_ANY is normally defined as 0. That is the IP address 0.0.0.0. RFC 1122 says that means "This host on this network". The linux IP stack seems to just route this to the loopback interface. (e.g. try ping 0.0.0.0 or even just ping 0). I'd say the author made a typo, and should have used INADDR_LOOPBACK.

关于c - 套接字 - 在客户端使用 INADDR_ANY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384694/

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