
350 Protocol Independence Using the Sockets API
struct sockaddr_in sin;
if (logging) {
sval = sizeof(sin);
if (getpeername(O, (struct sockaddr *)Rain, ~sval) < O)
err("gatpeernams: ~s", strerror(errno));
if (hp = gethostbyaddr((char *)~sin.sin_addr.s_addr,
sizeof(sin.sin_addr.s_addr), AF_INET))
Ip = hp->hname;
else
Ip = inet_ntoa(sin.sin_addr);
eyeing(LOG_NOTICE, "query from ~s", ip);
Figure 3: Use of a sockaddrAn to Store Arbitrary Addresses (4.4BSD fingerd)
A similar problem is also seen frequently in servers:
the use of a generic sockaddr to store address infor-
mation. Like the IP protocol specific ...