rbb 99/04/21 06:56:09
Modified: apr/network_io/unix select.c sockets.c apr/test Makefile include apr_network_io.h docs networkio.txt Log: Fixes for network I/O logic, so it works porperly. I'm sure there will be more of these. Revision Changes Path 1.2 +2 -1 apache-apr/apr/network_io/unix/select.c Index: select.c =================================================================== RCS file: /home/cvs/apache-apr/apr/network_io/unix/select.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- select.c 1999/04/14 19:17:21 1.1 +++ select.c 1999/04/21 13:56:06 1.2 @@ -58,10 +58,11 @@ #include <errno.h> #include <sys/time.h> #include <sys/types.h> +#include <unistd.h> void apr_sd_set(apr_socket_t *sock, apr_sd_set_t *sd_set) { - FDSET(sock->socketdes, sd_set); + FD_SET(sock->socketdes, sd_set); } void apr_sd_clr(apr_socket_t *sock, apr_sd_set_t *sd_set) 1.7 +18 -20 apache-apr/apr/network_io/unix/sockets.c Index: sockets.c =================================================================== RCS file: /home/cvs/apache-apr/apr/network_io/unix/sockets.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- sockets.c 1999/04/19 14:16:41 1.6 +++ sockets.c 1999/04/21 13:56:06 1.7 @@ -71,9 +71,8 @@ thesocket->addr = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in)); thesocket->addr->sin_family = AF_INET; - thesocket->addr->sin_addr.s_addr = INADDR_ANY; - thesocket->addr_len = sizeof(thesocket->addr); + thesocket->addr_len = sizeof(*thesocket->addr); if (thesocket->socketdes < 0) { free(thesocket->addr); @@ -116,6 +115,7 @@ apr_status_t apr_bind(apr_socket_t *sock) { + sock->addr->sin_addr.s_addr = INADDR_ANY; if (bind(sock->socketdes, (struct sockaddr *)sock->addr, sock->addr_len) == -1) return APR_FAILURE; else @@ -149,36 +149,34 @@ return NULL; } -apr_socket_t * apr_connect(char *hostname, unsigned short port) +apr_status_t apr_connect(apr_socket_t *sock, char *hostname, unsigned short port) { - apr_socket_t *new = (apr_socket_t *)malloc(sizeof(apr_socket_t)); struct hostent *hp; hp = gethostbyname(hostname); - new->socketdes = socket(AF_INET, SOCK_STREAM, 0); - new->addr = (struct sockaddr_in *)malloc (sizeof (struct sockaddr_in)); - if ((new->socketdes < 0) || (!hp) || (!new->addr)) { - free(new->addr); - free(new); - return NULL; + if ((sock->socketdes < 0) || (!hp) || (!sock->addr)) { + free(sock->addr); + free(sock); + return APR_FAILURE; } - memcpy((char *)&new->addr->sin_addr, hp->h_addr_list[0], hp->h_length); + memcpy((char *)&sock->addr->sin_addr, hp->h_addr_list[0], hp->h_length); - new->addr->sin_port = htons((short)port); - new->addr->sin_family = AF_INET; + sock->addr->sin_port = htons((short)port); + sock->addr->sin_family = AF_INET; - new->addr_len = sizeof(new->addr); + sock->addr_len = sizeof(*sock->addr); - if (connect(new->socketdes, new->addr, new->addr_len) < 0) { - free(new->addr); - free(new); - return NULL; + if ((connect(sock->socketdes, sock->addr, sock->addr_len) < 0) && + (errno != EINPROGRESS)) { + free(sock->addr); + free(sock); + return APR_FAILURE; } else { - new->remote_hostname = strdup(hostname); - return new; + sock->remote_hostname = strdup(hostname); + return APR_SUCCESS; } } 1.3 +8 -4 apache-apr/apr/test/Makefile Index: Makefile =================================================================== RCS file: /home/cvs/apache-apr/apr/test/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Makefile 1999/04/12 17:54:11 1.2 +++ Makefile 1999/04/21 13:56:07 1.3 @@ -12,12 +12,12 @@ SRCDIR=.. EXTRA_CFLAGS=-g EXTRA_LDFLAGS= -EXTRA_LIBS= -L../file_io -lfile +EXTRA_LIBS= -L../file_io -lfile -L../network_io -lnetwork EXTRA_INCLUDES= EXTRA_DEPS= OSDIR= INCDIR=../../include -INCLUDES0=-I ../file_io/unix -I $(INCDIR) +INCLUDES0=-I ../file_io/unix -I ../network_io/unix -I $(INCDIR) SHELL=/bin/sh CC=gcc CPP=gcc -E @@ -45,14 +45,19 @@ INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES) LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS) -OBJS= testfile.o \ +OBJS= testfile.o ab_apr.o\ .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $(LIBS) $< +all: + testfile ab_apr + testfile: $(CC) testfile.c $(INCLUDES) $(CFLAGS) $(LIBS) $< +ab_apr: + $(CC) ab_apr.c $(INCLUDES) $(CFLAGS) $(LIBS) -o ab_apr $< clean: rm -f *.o $(LIB) @@ -77,4 +82,3 @@ $(OBJS): Makefile # DO NOT REMOVE -alloc.o: open.c 1.10 +1 -1 apache-apr/include/apr_network_io.h Index: apr_network_io.h =================================================================== RCS file: /home/cvs/apache-apr/include/apr_network_io.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- apr_network_io.h 1999/04/19 14:16:39 1.9 +++ apr_network_io.h 1999/04/21 13:56:08 1.10 @@ -90,7 +90,7 @@ apr_status_t apr_bind(apr_socket_t *); apr_status_t apr_listen(apr_socket_t *, apr_int32_t); apr_socket_t *apr_accept(const apr_socket_t *); -apr_socket_t *apr_connect(char *, unsigned short); +apr_status_t apr_connect(apr_socket_t *, char *, unsigned short); char *apr_get_remote_hostname(apr_socket_t *); apr_status_t apr_gethostname(char *, int); 1.12 +7 -6 apache-apr/docs/networkio.txt Index: networkio.txt =================================================================== RCS file: /home/cvs/apache-apr/docs/networkio.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- networkio.txt 1999/04/19 14:16:40 1.11 +++ networkio.txt 1999/04/21 13:56:09 1.12 @@ -131,14 +131,15 @@ NOTE: accepted socket can not accept more connections. Original socket remains open, and can accept more connections. - apr_socket_t *apr_connect(char *, unisigned short) + apr_status_t apr_connect(apr_socket_t *, char *, unisigned short) Connect to a listening socket. - Arguments: - arg 1) hostname of the machine to connect to. - arg 2) port to connect to. - return) socket which is connected to server machine. NULL on failure. -NOTE: On failure, socket is closed, and memory is free'd on failure. + arg 1) Socket to use to connect. + arg 2) hostname of the machine to connect to. + arg 3) port to connect to. + return) APR_SUCCESS or APR_FAILURE. +NOTE: On failure, socket is closed, and memory is free'd on failure. ALWAYS + create the socket in apr_create_tcp_socket before calling this function. char *apr_get_remote_hostname(apr_socket_t *) Get the host name for the remote machine