- if (!lookup_name(fd, &ss, ss_len, name_buf, sizeof name_buf,
- port_buf, sizeof port_buf))
- check_name(fd, &ss, name_buf);
+ memset(&sin, 0, sin_len);
+ sin.sin_family = af;
+ inet_pton(af, client_addr(fd), &sin.sin_addr.s_addr);
+
+ if (!lookup_name(fd, (struct sockaddr_storage *)&sin, sin_len,
+ name_buf, sizeof name_buf, port_buf, sizeof port_buf))
+ check_name(fd, (struct sockaddr_storage *)&sin, name_buf);
+ } else {
+ struct sockaddr_storage ss;
+ socklen_t ss_len = sizeof ss;
+
+ client_sockaddr(fd, &ss, &ss_len);
+
+ if (!lookup_name(fd, &ss, ss_len, name_buf, sizeof name_buf,
+ port_buf, sizeof port_buf))
+ check_name(fd, &ss, name_buf);
+ }