[Click] [PATCH] Wrong initialization values with inet_makeaddr on ARM

Roberto Riggio roberto.riggio at create-net.org
Fri Oct 15 07:03:16 EDT 2010


This problems happens only on an ARM board, basically the following 
statements:

      addr_1.sin_addr = inet_makeaddr(127, 1);
      addr_2.sin_addr = inet_makeaddr(0, 0);
      addr_3.sin_addr.s_addr = INADDR_ANY;

      printf("Server (1), binded to %s\n",inet_ntoa(addr_1.sin_addr));
      printf("Server (2), binded to %s\n",inet_ntoa(addr_2.sin_addr));
      printf("Server (3), binded to %s\n",inet_ntoa(addr_3.sin_addr));

produce this output:

Server (1), binded to 0.0.133.112
Server (2), binded to 0.0.133.112
Server (3), binded to 0.0.0.0


The problem lies probably with the c lib used during the
compilation, but to me it was much easier to workaround the
problem with this patch.

--
diff -urN a/elements/userlevel/controlsocket.cc 
b/elements/userlevel/controlsocket.cc
--- a/elements/userlevel/controlsocket.cc    2010-10-15 
12:22:57.536443142 +0200
+++ b/elements/userlevel/controlsocket.cc    2010-10-15 
12:47:05.596443142 +0200
@@ -177,9 +177,9 @@
      sa.sin_family = AF_INET;
      sa.sin_port = htons(portno);
      if (_localhost)
-    sa.sin_addr = inet_makeaddr(127, 1);
+    sa.sin_addr.s_addr = INADDR_LOOPBACK;
      else
-    sa.sin_addr = inet_makeaddr(0, 0);
+    sa.sin_addr.s_addr = INADDR_ANY;
      int tries = 0;
      while (bind(_socket_fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) {
      if (tries > 10 || _unix_pathname.back() != '+' || portno >= 65534


More information about the click mailing list