rem: strerror(errno));
add: fd, strerror(errno));
context: char *client_name(int fd){	struct sockaddr ss;	int     length = sizeof(ss);	static char name_buf[100];	static char port_buf[100];	char *def = "UNKNOWN";	static int initialised;	struct addrinfo hints, *res, *res0;	int error;	if (initialised) return name_buf;	initialised = 1;	strcpy(name_buf,def);	if (getpeername(fd, (struct sockaddr *)&ss, &length)) {		/* FIXME: Can we really not continue? */		rprintf(FERROR, RSYNC_NAME ": getpeername on fd%d failed: %s\n",			strerror(errno));					exit_cleanup(RERR_SOCKETIO);	}#ifdef INET6        if (ss.sa_family == AF_INET6 && 	    IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)&ss)->sin6_addr)) {		struct sockaddr_in6 sin6;		struct sockaddr_in *sin;		memcpy(&sin6, &ss, sizeof(sin6));		sin = (struct sockaddr_in *)&ss;		memset(sin, 0, sizeof(*sin));		sin->sin_family = AF_INET;		length = sizeof(struct sockaddr_in);#ifdef HAVE_SOCKADDR_LEN		sin->sin_len = length;#endif		sin->sin_port = sin6.sin6_port;		memcpy(&sin->sin_addr, &sin6.sin6_addr.s6_addr[12],			sizeof(sin->sin_addr));        }#endif	/* reverse lookup */	if (getnameinfo((struct sockaddr *)&ss, length,			name_buf, sizeof(name_buf), port_buf, sizeof(port_buf),			NI_NAMEREQD | NI_NUMERICSERV) != 0) {		strcpy(name_buf, def);		rprintf(FERROR, "reverse name lookup failed\n");	}	/* forward lookup */	memset(&hints, 0, sizeof(hints));	hints.ai_family = PF_UNSPEC;	hints.ai_flags = AI_CANONNAME;	hints.ai_socktype = SOCK_STREAM;	error = getaddrinfo(name_buf, port_buf, &hints, &res0);	if (error) {		strcpy(name_buf, def);		rprintf(FERROR,			RSYNC_NAME ": forward name lookup for %s failed: %s\n",			port_buf,			gai_strerror(error));		return name_buf;	}	/* XXX sin6_flowinfo and other fields */	for (res = res0; res; res = res->ai_next) {		if (res->ai_family != ss.sa_family)			continue;		if (res->ai_addrlen != length)			continue;		if (memcmp(res->ai_addr, &ss, res->ai_addrlen) == 0)			break;	}	/* TODO: Do a  forward lookup as well to prevent spoofing */	if (res == NULL) {		strcpy(name_buf, def);		rprintf(FERROR, RSYNC_NAME ": "			"reverse name lookup mismatch on fd%d - spoofed address?\n",			fd);	}	freeaddrinfo(res0);	return name_buf;}