-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.45 2007/09/30 16:59:22 fabiankeil Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.47 2008/03/26 18:07:07 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
*
* Revisions :
* $Log: jbsockets.c,v $
+ * Revision 1.47 2008/03/26 18:07:07 fabiankeil
+ * Add hostname directive. Closes PR#1918189.
+ *
+ * Revision 1.46 2008/03/21 11:13:57 fabiankeil
+ * Only gather host information if it's actually needed.
+ * Also move the code out of accept_connection() so it's less likely
+ * to delay other incoming connections if the host is misconfigured.
+ *
* Revision 1.45 2007/09/30 16:59:22 fabiankeil
* Set the maximum listen() backlog to 128. Apparently SOMAXCONN is
* neither high enough, nor a hard limit on mingw32. Again for BR#1795281.
* 2 : ip_address = Pointer to return the pointer to
* the ip address string.
* 3 : hostname = Pointer to return the pointer to
- * the hostname.
+ * the hostname or NULL if the caller
+ * isn't interested in it.
*
* Returns : void.
*
#endif /* def HAVE_GETHOSTBYADDR_R_(8|7|5)_ARGS */
s_length = sizeof(server);
- *hostname = NULL;
+ if (NULL != hostname)
+ {
+ *hostname = NULL;
+ }
*ip_address = NULL;
if (!getsockname(afd, (struct sockaddr *) &server, &s_length))
{
*ip_address = strdup(inet_ntoa(server.sin_addr));
+
+ if (NULL == hostname)
+ {
+ /*
+ * We're done here, the caller isn't
+ * interested in knowing the hostname.
+ */
+ return;
+ }
#if defined(HAVE_GETHOSTBYADDR_R_8_ARGS)
gethostbyaddr_r((const char *)&server.sin_addr,
sizeof(server.sin_addr), AF_INET,
host = NULL;
}
#elif FEATURE_PTHREAD
- pthread_mutex_lock(&resolver_mutex);
+ privoxy_mutex_lock(&resolver_mutex);
host = gethostbyaddr((const char *)&server.sin_addr,
sizeof(server.sin_addr), AF_INET);
- pthread_mutex_unlock(&resolver_mutex);
+ privoxy_mutex_unlock(&resolver_mutex);
#else
host = gethostbyaddr((const char *)&server.sin_addr,
sizeof(server.sin_addr), AF_INET);
hostp = NULL;
}
#elif FEATURE_PTHREAD
- pthread_mutex_lock(&resolver_mutex);
+ privoxy_mutex_lock(&resolver_mutex);
while (NULL == (hostp = gethostbyname(host))
&& (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))
{
"Timeout #%u while trying to resolve %s. Trying again.",
dns_retries, host);
}
- pthread_mutex_unlock(&resolver_mutex);
+ privoxy_mutex_unlock(&resolver_mutex);
#else
while (NULL == (hostp = gethostbyname(host))
&& (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))