+ /*
+ * Determine the IP-Adress that the client used to reach us
+ * and the hostname associated with that address
+ */
+ if (!getsockname(afd, (struct sockaddr *) &server, &s_length))
+ {
+ csp->my_ip_addr_str = strdup(inet_ntoa(server.sin_addr));
+#if defined(HAVE_GETHOSTBYADDR_R_8_ARGS)
+ gethostbyaddr_r((const char *)&server.sin_addr,
+ sizeof(server.sin_addr), AF_INET,
+ &result, hbuf, HOSTENT_BUFFER_SIZE,
+ &host, &thd_err);
+#elif defined(HAVE_GETHOSTBYADDR_R_7_ARGS)
+ host = gethostbyaddr_r((const char *)&server.sin_addr,
+ sizeof(server.sin_addr), AF_INET,
+ &result, hbuf, HOSTENT_BUFFER_SIZE, &thd_err);
+#elif defined(HAVE_GETHOSTBYADDR_R_5_ARGS)
+ if (0 == gethostbyaddr_r((const char *)&server.sin_addr,
+ sizeof(server.sin_addr), AF_INET,
+ &result, &hdata))
+ {
+ host = &result;
+ }
+ else
+ {
+ host = NULL;
+ }
+#else
+ host = gethostbyaddr((const char *)&server.sin_addr,
+ sizeof(server.sin_addr), AF_INET);
+#endif
+ if (host == NULL)
+ {
+ log_error(LOG_LEVEL_ERROR, "Unable to get my own hostname: %E\n");
+ }
+ else
+ {
+ csp->my_hostname = strdup(host->h_name);
+ }
+ }
+