Remove incorrect news message
[rsync/rsync.git] / socket.c
index 7865e31..81bdb39 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -170,34 +170,19 @@ open a socket of the specified type, port and address for incoming data
 ****************************************************************************/
 static int open_socket_in(int type, int port, struct in_addr *address)
 {
-       struct hostent *hp;
        struct sockaddr_in sock;
-       char host_name[MAXHOSTNAMELEN];
        int res;
        int one=1;
 
-       /* get my host name */
-       if (gethostname(host_name, sizeof(host_name)) == -1) { 
-               rprintf(FERROR,"gethostname failed\n"); 
-               return -1; 
-       } 
-
-       /* get host info */
-       if ((hp = gethostbyname(host_name)) == 0) {
-               rprintf(FERROR,"gethostbyname: Unknown host %s\n",host_name);
-               return -1;
-       }
-  
        memset((char *)&sock,0,sizeof(sock));
-       memcpy((char *)&sock.sin_addr,(char *)hp->h_addr, hp->h_length);
        sock.sin_port = htons(port);
-       sock.sin_family = hp->h_addrtype;
+       sock.sin_family = AF_INET;
        if (address) {
                sock.sin_addr = *address;
        } else {
                sock.sin_addr.s_addr = INADDR_ANY;
        }
-       res = socket(hp->h_addrtype, type, 0);
+       res = socket(AF_INET, type, 0);
        if (res == -1) { 
                rprintf(FERROR,"socket failed: %s\n",
                        strerror(errno)); 
@@ -210,6 +195,10 @@ static int open_socket_in(int type, int port, struct in_addr *address)
        if (bind(res, (struct sockaddr * ) &sock,sizeof(sock)) == -1) { 
                rprintf(FERROR,"bind failed on port %d: %s\n", port,
                        strerror(errno));
+               if (errno == EACCES && port < 1024) {
+                       rprintf(FERROR, "Note: you must be root to bind "
+                               "to low-numbered ports");
+               }
                close(res); 
                return -1;
        }
@@ -223,13 +212,14 @@ static int open_socket_in(int type, int port, struct in_addr *address)
  */
 int is_a_socket(int fd)
 {
-       int v, l;
+       int v;
+       socklen_t l;
        l = sizeof(int);
 
         /* Parameters to getsockopt, setsockopt etc are very
          * unstandardized across platforms, so don't be surprised if
-         * there are compiler warnings on e.g. SCO OpenSwerver.  It
-         * seems they all eventually get the right idea.
+         * there are compiler warnings on e.g. SCO OpenSwerver or AIX.
+         * It seems they all eventually get the right idea.
          *
          * Debian says: ``The fifth argument of getsockopt and
          * setsockopt is in reality an int [*] (and this is what BSD
@@ -266,7 +256,7 @@ void start_accept_loop(int port, int (*fn)(int ))
                fd_set fds;
                int fd;
                struct sockaddr addr;
-               int in_addrlen = sizeof(addr);
+               socklen_t in_addrlen = sizeof(addr);
 
                /* close log file before the potentially very long select so
                   file can be trimmed by another process instead of growing
@@ -283,7 +273,7 @@ void start_accept_loop(int port, int (*fn)(int ))
                if(!FD_ISSET(s, &fds)) continue;
 
                 /* See note above prototypes. */
-               fd = accept(s,&addr,&in_addrlen);
+               fd = accept(s,&addr, &in_addrlen);
 
                if (fd == -1) continue;
 
@@ -477,7 +467,7 @@ char *client_name(int fd)
 {
        struct sockaddr sa;
        struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
-       int     length = sizeof(sa);
+       socklen_t length = sizeof(sa);
        static char name_buf[100];
        struct hostent *hp;
        char **p;