- 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/15366764/
在发件人向我发送邮件后,我需要从他那里获取 IP 地址。我正在使用 UDP 套接字,因此发送方的 IP 地址将自动注册到 sin_addr 结构中,因为我正在使用 recvfrom() 函数。 如何操
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
sin_addr.s_addr之间究竟有什么区别?和 inet_addr ? addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 是我在我的编程中使用的 -
我是 UNIX 套接字编程的新手,我想知道 sin_addr、sin_family 等中的“sin”是什么,简称?在 struct socketaddr_in 中“in”是什么意思或缩写是什么? 谢谢
这个问题在这里已经有了答案: How to print IP address from getaddrinfo() (2 个答案) 关闭 7 年前。 我正在尝试从 struct in_addr 获取
这个问题在这里已经有了答案: Sockets - Using INADDR_ANY on client side (4 个答案) 关闭 5 年前。 在socket编程中是做什么的 servaddr.
我正在 Linux 中进行套接字编程。有一个问题。我们怎么可能允许特定的 IP 地址连接到我们的服务器。 例如: 允许 10.0.0.1 拒绝 10.0.0.1 我特别谈论的是我们将 INADDR_A
我正在尝试编写一个小的 socks 代理作为练习。 我正在尝试解析来自传入连接的 SOCKS 连接请求。 socks 协议(protocol)指定所需的目标地址为字节 4、5、6、7,所需的端口为字节
我遇到了两个线程: 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
当我在 Linux 上编译代码(在下面找到)时,gcc 说: error: request for member ‘sin_addr’ in something not a structure or
我是一名优秀的程序员,十分优秀!