ip.7: INADDR_* values cannot be assigned directly to s_addr
PATCH 1/1 ip.7: INADDR_* values cannot be assigned directly to s_addr
---
According to The Open Group Base Specifications Issue 7, RATIONALE section of <http://pubs.opengroup.org/onlinepubs/9699919799/
basedefs/netinet_in.h.html> some INADDR_* values must be converted using htonl().
INADDR_ANY and INADDR_BROADCAST are byte-order-neutral so they do not require htonl(), however I only comment this fact in NOTES. On the text I recommend to use htonl(), "even if for some subset it's not necessary".
Proof code:
#include <arpa/inet.h> /* inet_addr() htonl() */
#include <inttypes.h> /* PRIu32 */
#include <netinet/in.h> /* INADDR_* */
#include <stdio.h> /* printf() */
#define LOOPBACK_ADDRESS "127.0.0.1"
int
main(void)
{
/* uint32_t as defined in the former
* specification */
uint32_t addr;
addr = inet_addr(LOOPBACK_ADDRESS);
printf("inet_addr: %" PRIu32 "\n"
"htonl(INADDR_LOOPBACK): %" PRIu32 "\n"
"INADDR_LOOPBACK: %" PRIu32 "\n",
addr, htonl(INADDR_LOOPBACK),
INADDR_LOOPBACK);
return 0;
}
Ricardo Biehl Pasqualiman7/ip.7 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
man7/ip.7 +11 -1
@@ -193,8 +193,11 @@ contains the host interface address in network byte order. .I in_addr should be assigned one of the .BR INADDR_* -values (e.g., +values +(e.g., .BR INADDR_ANY ) +using +.BR htonl (3) or set using the .BR inet_aton (3), .BR inet_addr (3),
@@ -1267,6 +1270,13 @@ Using the socket options level isn't portable; BSD-based stacks use the .B IPPROTO_IP level. +.PP +.B INADDR_ANY +(0.0.0.0) and +.B INADDR_BROADCAST +(255.255.255.255) are byte-order-neutral. That means +.BR htonl (3) +has no effect on them. .SS Compatibility For compatibility with Linux 2.0, the obsolete .BI "socket(AF_INET, SOCK_PACKET, " protocol )
Signature · 6 lines
2.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20171214211815.GA4844-bi+AKbBUZKY6gyzm1THtWbp2dZbC/[email protected]
Hello Ricardo,
Quoted 1 line · Ricardo Biehl Pasquali
Signed-off-by Ricardo Biehl Pasquali <[email protected]>
Thanks. I applid you patch, but then also did s/INADDR_ANY/INADDR_LOOPBACK/ in the first sentence that you changed. INADDR_LOOPBACK is a better example, since it is not byte-order neutral.
Cheers,
Michael
Quoted 75 lines
---
According to The Open Group Base Specifications Issue 7, RATIONALE section of <http://pubs.opengroup.org/onlinepubs/9699919799/
basedefs/netinet_in.h.html> some INADDR_* values must be converted usinghtonl().
INADDR_ANYandINADDR_BROADCASTare byte-order-neutral so they do not requirehtonl(), however I only comment this fact in NOTES. On the text I recommend to usehtonl(), "even if for some subset it's not necessary".Proof code:
#include <arpa/inet.h> /* inet_addr() htonl() */ #include <inttypes.h> /* PRIu32 */ #include <netinet/in.h> /* INADDR_* */ #include <stdio.h> /* printf() */ #define LOOPBACK_ADDRESS "127.0.0.1" int main(void) { /* uint32_t as defined in the former * specification */ uint32_t addr; addr = inet_addr(LOOPBACK_ADDRESS); printf("inet_addr: %" PRIu32 "\n" "htonl(INADDR_LOOPBACK): %" PRIu32 "\n" "INADDR_LOOPBACK: %" PRIu32 "\n", addr, htonl(INADDR_LOOPBACK), INADDR_LOOPBACK); return 0; } Ricardo Biehl Pasqualiman7/ip.7 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)man7/ip.7 +11
-1@@ -193,8 +193,11 @@ contains the host interface address in network byte order. .I in_addr should be assigned one of the .BR INADDR_* -values (e.g., +values +(e.g., .BR INADDR_ANY ) +using +.BR htonl (3) or set using the .BR inet_aton (3), .BR inet_addr (3),@@ -1267,6 +1270,13 @@ Using the socket options level isn't portable; BSD-based stacks use the .B IPPROTO_IP level. +.PP +.B INADDR_ANY +(0.0.0.0) and +.B INADDR_BROADCAST +(255.255.255.255) are byte-order-neutral. That means +.BR htonl (3) +has no effect on them. .SS Compatibility For compatibility with Linux 2.0, the obsolete .BI "socket(AF_INET, SOCK_PACKET, " protocol )
Signature · 7 lines
Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/ -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html