X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3eb388185b97920933a1bd17753866815e38539b..d1be231290b3867648ee417fad341fdf1caaa94b:/socket.c diff --git a/socket.c b/socket.c index 6551df43..b9f01a61 100644 --- a/socket.c +++ b/socket.c @@ -125,12 +125,12 @@ void start_accept_loop(int port, int (*fn)(int )) /* open an incoming socket */ s = open_socket_in(SOCK_STREAM, port); if (s == -1) - exit_cleanup(1); + exit_cleanup(RERR_SOCKETIO); /* ready to listen */ if (listen(s, 5) == -1) { close(s); - exit_cleanup(1); + exit_cleanup(RERR_SOCKETIO); } @@ -320,13 +320,17 @@ char *client_addr(int fd) struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa); int length = sizeof(sa); static char addr_buf[100]; + static int initialised; - if (getpeername(fd, &sa, &length)) { - exit_cleanup(1); - } + if (initialised) return addr_buf; - strlcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr), sizeof(addr_buf)-1); + initialised = 1; + if (getpeername(fd, &sa, &length)) { + exit_cleanup(RERR_SOCKETIO); + } + + strlcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr), sizeof(addr_buf)); return addr_buf; } @@ -343,18 +347,23 @@ char *client_name(int fd) struct hostent *hp; char **p; char *def = "UNKNOWN"; + static int initialised; + + if (initialised) return name_buf; + + initialised = 1; strcpy(name_buf,def); if (getpeername(fd, &sa, &length)) { - exit_cleanup(1); + exit_cleanup(RERR_SOCKETIO); } /* Look up the remote host name. */ if ((hp = gethostbyaddr((char *) &sockin->sin_addr, sizeof(sockin->sin_addr), AF_INET))) { - strlcpy(name_buf,(char *)hp->h_name,sizeof(name_buf) - 1); + strlcpy(name_buf,(char *)hp->h_name,sizeof(name_buf)); }