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