manoj 99/10/08 14:28:48
Modified: src/lib/apr/network_io/beos networkio.h sockets.c sockopt.c
src/lib/apr/network_io/os2 networkio.h sockets.c sockopt.c
src/lib/apr/network_io/unix sockopt.c
src/lib/apr/network_io/win32 networkio.h sockets.c sockopt.c
Log:
Get rid of the per-connection name lookup on non-Unix platforms. This
also adds an attempt at correct error handling for gethostbyaddr() for
all platforms. Non-Unix maintainers should check to make sure this is
done right.
Revision Changes Path
1.3 +0 -1 apache-2.0/src/lib/apr/network_io/beos/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/networkio.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -u -r1.2 -r1.3
--- networkio.h 1999/10/02 23:11:36 1.2
+++ networkio.h 1999/10/08 21:27:37 1.3
@@ -71,7 +71,6 @@
struct socket_t {
ap_context_t *cntxt;
int socketdes;
- char *remote_hostname;
struct sockaddr_in * addr;
int addr_len;
int timeout;
1.6 +0 -10 apache-2.0/src/lib/apr/network_io/beos/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/sockets.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -u -r1.5 -r1.6
--- sockets.c 1999/10/08 20:04:15 1.5
+++ sockets.c 1999/10/08 21:27:39 1.6
@@ -90,7 +90,6 @@
}
(*new)->socketdes = socket(AF_INET ,SOCK_STREAM, 0);
- (*new)->remote_hostname=NULL;
(*new)->addr->sin_family = AF_INET;
(*new)->addr_len = sizeof(*(*new)->addr);
memset(&(*new)->addr->sin_zero, 0, sizeof((*new)->addr->sin_zero));
@@ -172,8 +171,6 @@
ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock)
{
- struct hostent *hptr;
-
(*new) = (struct socket_t *)ap_palloc(sock->cntxt,
sizeof(ap_socket_t));
@@ -189,12 +186,6 @@
return errno;
}
- hptr = gethostbyaddr((char*)&(*new)->addr->sin_addr,
- sizeof(struct in_addr), AF_INET);
- if (hptr != NULL){
- (*new)->remote_hostname = strdup(hptr->h_name);
- }
-
ap_register_cleanup((*new)->cntxt, (void *)new,
socket_cleanup, NULL);
return APR_SUCCESS;
@@ -222,7 +213,6 @@
return errno;
}
- sock->remote_hostname = strdup(hostname);
return APR_SUCCESS;
}
1.4 +14 -4 apache-2.0/src/lib/apr/network_io/beos/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/sockopt.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -u -r1.3 -r1.4
--- sockopt.c 1999/10/04 16:37:06 1.3
+++ sockopt.c 1999/10/08 21:27:41 1.4
@@ -58,6 +58,7 @@
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
+#include <netdb.h>
#include "networkio.h"
#include "apr_network_io.h"
#include "apr_general.h"
@@ -102,9 +103,18 @@
ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
{
- (*name) = (char*)ap_pstrdup(sock->cntxt, sock->remote_hostname);
- if (*name) {
- return APR_SUCCESS;
+ struct hostent *hptr;
+
+ hptr = gethostbyaddr((char *)&(sock->addr->sin_addr),
+ sizeof(struct in_addr), AF_INET);
+ if (hptr != NULL) {
+ *name = ap_pstrdup(sock->cntxt, hptr->h_name);
+ if (*name) {
+ return APR_SUCCESS;
+ }
+ return APR_ENOMEM;
}
- return APR_ENOMEM;
+
+ /* XXX - Is this threadsafe? - manoj */
+ return h_errno;
}
1.2 +0 -1 apache-2.0/src/lib/apr/network_io/os2/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/networkio.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -u -r1.1 -r1.2
--- networkio.h 1999/08/17 15:59:43 1.1
+++ networkio.h 1999/10/08 21:27:52 1.2
@@ -62,7 +62,6 @@
struct socket_t {
ap_context_t *cntxt;
int socketdes;
- char *remote_hostname;
struct sockaddr_in *addr;
int addr_len;
};
1.3 +0 -10 apache-2.0/src/lib/apr/network_io/os2/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/sockets.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -u -r1.2 -r1.3
--- sockets.c 1999/10/04 16:37:09 1.2
+++ sockets.c 1999/10/08 21:27:55 1.3
@@ -92,7 +92,6 @@
}
(*new)->socketdes = socket(AF_INET ,SOCK_STREAM, IPPROTO_TCP);
- (*new)->remote_hostname = NULL;
(*new)->addr->sin_family = AF_INET;
@@ -147,8 +146,6 @@
ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock)
{
- struct hostent *hptr;
-
(*new) = (struct socket_t *)ap_palloc(sock->cntxt,
sizeof(struct socket_t));
@@ -164,12 +161,6 @@
return errno;
}
- hptr = gethostbyaddr((char *)&(*new)->addr->sin_addr,
- sizeof(struct in_addr), AF_INET);
- if (hptr != NULL) {
- (*new)->remote_hostname = strdup(hptr->h_name);
- }
-
ap_register_cleanup((*new)->cntxt, (void *)(*new),
socket_cleanup, NULL);
return APR_SUCCESS;
@@ -202,7 +193,6 @@
return errno;
}
else {
- sock->remote_hostname = strdup(hostname);
return APR_SUCCESS;
}
}
1.3 +13 -4 apache-2.0/src/lib/apr/network_io/os2/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/sockopt.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -u -r1.2 -r1.3
--- sockopt.c 1999/10/04 16:37:09 1.2
+++ sockopt.c 1999/10/08 21:27:58 1.3
@@ -64,6 +64,7 @@
#include <netinet/in.h>
#include <unistd.h>
#include <fcntl.h>
+#include <netdb.h>
int soblock(int sd)
{
@@ -164,11 +165,19 @@
ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
{
- (*name) = ap_pstrdup(sock->cntxt, sock->remote_hostname);
- if (*name) {
- return APR_SUCCESS;
+ struct hostent *hptr;
+
+ hptr = gethostbyaddr((char *)&(sock->addr->sin_addr),
+ sizeof(struct in_addr), AF_INET);
+ if (hptr != NULL) {
+ *name = ap_pstrdup(sock->cntxt, hptr->h_name);
+ if (*name) {
+ return APR_SUCCESS;
+ }
+ return APR_ENOMEM;
}
- return APR_ENOMEM;
+ /* XXX - Is this threadsafe? - manoj */
+ return h_errno;
}
1.7 +2 -2 apache-2.0/src/lib/apr/network_io/unix/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockopt.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -u -r1.6 -r1.7
--- sockopt.c 1999/10/08 19:44:32 1.6
+++ sockopt.c 1999/10/08 21:28:24 1.7
@@ -64,7 +64,6 @@
#include <netinet/in.h>
#include <unistd.h>
#include <fcntl.h>
-#include <arpa/inet.h>
#include <netdb.h>
static ap_status_t soblock(int sd)
@@ -215,7 +214,8 @@
return APR_ENOMEM;
}
- return errno;
+ /* XXX - Is this threadsafe? */
+ return h_errno;
}
1.3 +0 -1 apache-2.0/src/lib/apr/network_io/win32/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/networkio.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -u -r1.2 -r1.3
--- networkio.h 1999/09/22 17:30:34 1.2
+++ networkio.h 1999/10/08 21:28:36 1.3
@@ -62,7 +62,6 @@
struct socket_t {
ap_context_t *cntxt;
SOCKET sock;
- char *remote_hostname;
struct sockaddr_in *addr;
size_t addr_len;
int timeout;
1.8 +0 -11 apache-2.0/src/lib/apr/network_io/win32/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockets.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -u -r1.7 -r1.8
--- sockets.c 1999/10/08 20:04:24 1.7
+++ sockets.c 1999/10/08 21:28:38 1.8
@@ -93,7 +93,6 @@
* No flags to use when creating a socket, so use 0 for that parameter
as well.
*/
(*new)->sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- (*new)->remote_hostname = NULL;
(*new)->addr->sin_family = AF_INET;
@@ -189,9 +188,6 @@
ap_status_t ap_accept(struct socket_t **new, const struct socket_t *sock)
{
- struct hostent *hptr;
-
-
(*new) = (struct socket_t *)ap_palloc(sock->cntxt,
sizeof(struct socket_t));
@@ -207,12 +203,6 @@
return errno;
}
- hptr = gethostbyaddr((char *)&(*new)->addr->sin_addr,
- sizeof(struct in_addr), AF_INET);
- if (hptr != NULL) {
- (*new)->remote_hostname = strdup(hptr->h_name);
- }
-
ap_register_cleanup((*new)->cntxt, (void *)(*new),
socket_cleanup, NULL);
return APR_SUCCESS;
@@ -248,7 +238,6 @@
if (connect(sock->sock, (const struct sockaddr *)sock->addr,
sock->addr_len) == 0) {
- sock->remote_hostname = strdup(hostname);
return APR_SUCCESS;
}
else {
1.3 +19 -4 apache-2.0/src/lib/apr/network_io/win32/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockopt.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -u -r1.2 -r1.3
--- sockopt.c 1999/10/04 16:37:16 1.2
+++ sockopt.c 1999/10/08 21:28:41 1.3
@@ -136,11 +136,26 @@
ap_status_t ap_get_remote_hostname(char **name, struct socket_t *sock)
{
- (*name) = ap_pstrdup(sock->cntxt, sock->remote_hostname);
- if (*name) {
- return APR_SUCCESS;
+ struct hostent *hptr;
+
+ hptr = gethostbyaddr((char *)&(sock->addr->sin_addr),
+ sizeof(struct in_addr), AF_INET);
+
+ if (hptr != NULL) {
+ *name = ap_pstrdup(sock->cntxt, hptr->h_name);
+ if (*name) {
+ return APR_SUCCESS;
+ }
+ return APR_ENOMEM;
}
- return APR_ENOMEM;
+
+ /* XXX - I don't know what the correct way to deal with host resolution
+ * errors on Windows is. WSAGetLastError() seems to use a different set
of
+ * error numbers than APR does. The previous code didn't deal with them
at
+ * all. - manoj
+ */
+
+ return h_errno;
}