- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到了两个线程:
Socket with recv-timeout: What is wrong with this code?
Reading / Writing to a socket using a FILE stream in c
一个使用 htonl
而另一个不使用。
哪个是对的?
最佳答案
因为像 INADDR_LOOPBACK
这样的其他常量是按主机字节顺序排列的,我认为这个系列中的所有常量都应该应用 htonl
,包括 INADDR_ANY
.
(注意:我在@Mat 编辑时写了这个答案;他的答案现在也说最好保持一致并始终使用 htonl
。)
基本原理
如果你这样写代码,对 future 的代码维护者来说是一种危险:
if (some_condition)
sa.s_addr = htonl(INADDR_LOOPBACK);
else
sa.s_addr = INADDR_ANY;
如果我正在审查这段代码,我会立即质疑为什么其中一个常量应用了 htonl
而另一个没有应用。我会将其报告为错误,无论我是否碰巧知道 INADDR_ANY
始终为 0,因此无法进行转换。
您编写的代码不仅要具有正确的运行时行为,还应该在可能的情况下显而易见并且容易让人相信它是正确的。出于这个原因,您不应删除 INADDR_ANY
周围的 htonl
。我能看到的不使用 htonl
的三个原因是:
htonl
可能会冒犯有经验的套接字程序员,因为他们知道它什么都不做(因为他们知道常量的值)。关于c - sin_addr.s_addr = INADDR_ANY;需要 htonl 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081892/
我正在尝试对一些套接字进行编程,因此在服务器端,我使用 htonl(INADDR_ANY)。就我的理解而言,在我看来,这个函数生成了一个随机 IP(我说得对吗?)。事实上,我想将我的套接字与我的 lo
找了几个小时,还是一头雾水。根据我的发现,INADDR_ANY 旨在指定套接字将接受与分配给服务器的任何地址的连接。然而,以下导致客户端只能从同一台机器连接到 localhost:7777。 addr
我最近遇到了 this blog post它描述了一个使用 libev 的 TCP 服务器客户端。服务器使用 INADDR_ANY 绑定(bind)到我熟悉的接口(interface)。但是,我很惊讶
The constant INADDR_ANY is the so-called IPv4 wildcard address. The wildcard IP address is useful fo
如果我将套接字绑定(bind)到 INADDR_ANY,我知道它将接受服务器上配置的任何 IP 上的传入连接。假设我在进行 bind() 调用时配置了 1 个 IP,然后配置了一个新 IP。 bind
在一个场景中,我通过 INADDR_ANY 监听 TCP 端口。 ,并获得客户端连接,现在想要接受来自该连接的 UDP 数据包,我如何确定路由到该客户端的接口(interface)的实际 IP 地址以
这个问题在这里已经有了答案: Sockets - Using INADDR_ANY on client side (4 个答案) 关闭 5 年前。 在socket编程中是做什么的 servaddr.
我正在使用 Pelican建立一个博客。启动开发服务器后,我收到警告: Do you want the application “Python.app” to accept incoming netw
当我使用 INADDR_ANY 指定要绑定(bind)到套接字的 IP 地址时,套接字稍后会监听端口,如下所示: sockaddr_in sockAddr; sockAddr.sin_family =
我正在 Linux 中进行套接字编程。有一个问题。我们怎么可能允许特定的 IP 地址连接到我们的服务器。 例如: 允许 10.0.0.1 拒绝 10.0.0.1 我特别谈论的是我们将 INADDR_A
我遇到了两个线程: Socket with recv-timeout: What is wrong with this code? Reading / Writing to a socket usin
我遇到了两个线程: Socket with recv-timeout: What is wrong with this code? Reading / Writing to a socket usin
我有一个用 C 编写的网络服务器应用程序,监听器使用 INADDR_ANY 绑定(bind),因此它可以接受通过安装它的主机的任何 IP 地址的连接。 我需要确定客户端在建立连接时使用了哪个服务器的
Python 中的一个简单实验(在 Windows 上)表明我能够同时绑定(bind)到通配符地址和特定地址上的同一端口: import socket import select MY_PORT =
我的代码当前正在使用 INADDR_ANY,我正在测试是否能够通过 Ubuntu 路由器[使用 IPTables] 将数据包从 VM 客户端发送到我的主机。 我能够从 Linux 路由器后面的客户端和
我写了一个加入源特定多播组并接收 udp 多播数据包的程序: #include #include #include #include #include #include #include
我在 Windows 7 上,在 connect 与 SO_REUSEADDR 之前使用 bind,并将本地地址结构设置为 IP 地址 INADDR _ANY 和端口 0(零),以便让操作系统选择客户
我对绑定(bind)套接字时 INADDR_ANY 的使用和后果感到困惑。当然 INADDR_ANY 会监听所有本地接口(interface)。我的问题是这会产生什么后果。 我记得读过,绑定(bind
我的 Winsock Delphi 应用程序应该在所有网络接口(interface)上监听多播 UDP/IP 流。它可以正常收听,直到我在另一台具有不同网络适配器优先级顺序的 PC 上尝试它。 然后我
我正在尝试编写多播服务器。我有两个问题: 如何在以太网/WiFi 接口(interface)等多个接口(interface)上发送多播公告。我需要为每个接口(interface)创建多个套接字并绑定(
我是一名优秀的程序员,十分优秀!