rbb 99/04/28 09:00:10
Modified: apr/network_io/unix Makefile networkio.h
apr/test client.c server.c testsock.c
include apr_network_io.h
docs networkio.txt
Added: apr/network_io/unix poll.c
Removed: apr/network_io/unix select.c
Log:
Changed apr_select to apr_poll. It looks more portable, and it was what we
had
originally designed, so I went back to it. I also updated the test suite to
use apr_poll instead of apr_select.
Revision Changes Path
1.5 +3 -2 apache-apr/apr/network_io/unix/Makefile
Index: Makefile
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/Makefile,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Makefile 1999/04/14 19:17:18 1.4
+++ Makefile 1999/04/28 16:00:05 1.5
@@ -47,7 +47,7 @@
LIB= libnetwork.a
-OBJS= sockets.o sendrecv.o sockopt.o select.o
+OBJS= sockets.o sendrecv.o sockopt.o poll.o
.c.o:
$(CC) -c $(INCLUDES) $(CFLAGS) $<
@@ -85,4 +85,5 @@
sockets.o: sockets.c
sendrecv.o: sendrecv.c
sockopt.o: sockopt.c
-select.o: select.c
+poll.o: poll.c
+
1.6 +16 -1 apache-apr/apr/network_io/unix/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/networkio.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- networkio.h 1999/04/15 20:08:15 1.5
+++ networkio.h 1999/04/28 16:00:06 1.6
@@ -56,6 +56,17 @@
#ifndef NETWORK_IO_H
#define NETWORK_IO_H
+#include "apr_network_io.h"
+#include "apr_general.h"
+#include <poll.h>
+
+#define APOLLIN POLLIN
+#define APOLLPRI POLLPRI
+#define APOLLOUT POLLOUT
+#define APOLLERR POLLERR
+#define APOLLHUP POLLHUP
+#define APOLLNVAL POLLNVAL
+
struct socket_t {
int socketdes;
char *remote_hostname;
@@ -63,7 +74,11 @@
size_t addr_len;
};
-typedef fd_set sd_set_t;
+struct pollfd_t {
+ struct socket_t *sock;
+ apr_int16_t events;
+ apr_int16_t revents;
+};
#endif /* ! NETWORK_IO_H */
1.1 apache-apr/apr/network_io/unix/poll.c
Index: poll.c
===================================================================
/* ====================================================================
* Copyright (c) 1999 The Apache Group. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* 4. The names "Apache Server" and "Apache Group" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the Apache Group
* for use in the Apache HTTP server project (http://www.apache.org/)."
*
* THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Group.
* For more information on the Apache Group and the Apache HTTP server
* project, please see <http://www.apache.org/>.
*
*/
#include "apr_network_io.h"
#include "networkio.h"
#include "apr_general.h"
#include <errno.h>
#include <sys/poll.h>
apr_int32_t apr_poll(apr_pollfd_t *aprset, apr_int32_t nsds, apr_int32_t
timeout)
{
int i;
struct pollfd *pollset;
pollset = (struct pollfd *)malloc(sizeof(struct pollfd) * nsds);
for (i = 0; i < nsds; i++) {
pollset[i].fd = aprset[i].sock->socketdes;
pollset[i].events = aprset[i].events;
}
poll(pollset, nsds, timeout);
for (i = 0; i < nsds; i++) {
pollset[i].revents = aprset[i].revents;
}
}
1.2 +1 -2 apache-apr/apr/test/client.c
Index: client.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/client.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- client.c 1999/04/28 14:30:25 1.1
+++ client.c 1999/04/28 16:00:08 1.2
@@ -67,7 +67,6 @@
int main(int argc, char *argv[])
{
apr_socket_t *sock;
- apr_sd_set_t *sdset;
apr_int32_t rv;
struct timeval timeout;
char datasend[STRLEN] = "Send data test";
@@ -97,7 +96,7 @@
fprintf(stdout, "OK\n");
fprintf(stdout, "\tClient: Connecting to socket.......");
- if (apr_connect(sock, "localhost", 8021) == APR_FAILURE) {
+ if (apr_connect(sock, "localhost") == APR_FAILURE) {
apr_close_socket(sock);
fprintf(stderr, "Could not connect\n");
exit(-1);
1.2 +6 -6 apache-apr/apr/test/server.c
Index: server.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/server.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- server.c 1999/04/28 14:30:25 1.1
+++ server.c 1999/04/28 16:00:08 1.2
@@ -68,8 +68,8 @@
{
apr_socket_t *sock;
apr_socket_t *sock2;
- apr_sd_set_t sdset;
apr_int32_t rv;
+ apr_pollfd_t sdset;
char datasend[STRLEN];
char datarecv[STRLEN] = "Recv data test";
@@ -112,13 +112,13 @@
}
fprintf(stdout, "OK\n");
- fprintf(stdout, "\tServer: Setting up sd sets.......");
- apr_sd_zero(&sdset);
- apr_sd_set(sock, &sdset);
- fprintf(stdout, "Setup done\n");
+ fprintf(stdout, "\tServer: Setting up socket for polling.......");
+ sdset.sock = sock;
+ sdset.events = APR_POLLIN;
+ fprintf(stdout, "OK\n");
fprintf(stdout, "\tServer: Beginning to select on socket.......");
- rv = apr_select(sock->socketdes + 1, &sdset, &sdset, &sdset, NULL);
+ rv = apr_poll(&sdset, 1, 0);
if (rv == -1) {
apr_close_socket(sock);
fprintf(stderr, "Select caused an error\n");
1.2 +3 -3 apache-apr/apr/test/testsock.c
Index: testsock.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/testsock.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- testsock.c 1999/04/28 14:30:25 1.1
+++ testsock.c 1999/04/28 16:00:08 1.2
@@ -74,7 +74,7 @@
fprintf(stdout, "This test relies on the process test working.
Please\n");
fprintf(stdout, "run that test first, and only run this test when it\n");
fprintf(stdout, "completes successfully. Alternitevly, you could
run\n");
- fprintf(stdout, "parnetio and childnetio by yourself.\n");
+ fprintf(stdout, "server and client by yourself.\n");
fprintf(stdout, "Creating children to run network tests.......\n");
attr1 = apr_createprocattr_init();
@@ -86,8 +86,8 @@
exit(-1);
}
- proc1 = apr_create_process("parnetio", NULL, NULL, attr1);
- proc2 = apr_create_process("childnetio", NULL, NULL, attr2);
+ proc1 = apr_create_process("server", NULL, NULL, attr1);
+ proc2 = apr_create_process("client", NULL, NULL, attr2);
if (proc1 == NULL || proc2 == NULL) {
fprintf(stderr, "Problem spawning new process\n");
1.14 +10 -7 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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- apr_network_io.h 1999/04/26 13:07:50 1.13
+++ apr_network_io.h 1999/04/28 16:00:09 1.14
@@ -75,11 +75,18 @@
#define APR_SO_NONBLOCK 8
#define APR_SO_REUSEADDR 16
+#define APR_POLLIN APOLLIN
+#define APR_POLLPRI APOLLPRI
+#define APR_POLLOUT APOLLOUT
+#define APR_POLLERR APOLLERR
+#define APR_POLLHUP APOLLHUP
+#define APR_POLLNVAL APOLLNVAL
+
typedef enum {APR_SHUTDOWN_READ, APR_SHUTDOWN_WRITE,
APR_SHUTDOWN_READWRITE} apr_shutdown_how_e;
typedef struct socket_t apr_socket_t;
-typedef sd_set_t apr_sd_set_t;
+typedef struct pollfd_t apr_pollfd_t;
/* function definitions */
@@ -90,7 +97,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_status_t apr_connect(apr_socket_t *, char *, unsigned short);
+apr_status_t apr_connect(apr_socket_t *, char *);
char *apr_get_remote_hostname(apr_socket_t *);
apr_status_t apr_gethostname(char *, int);
@@ -100,12 +107,8 @@
apr_status_t apr_setsocketopt(apr_socket_t *, apr_int32_t, apr_int32_t);
apr_status_t apr_setport(apr_socket_t *, apr_uint32_t);
-
-void apr_sd_set(apr_socket_t *, apr_sd_set_t *);
-void apr_sd_clr(apr_socket_t *, apr_sd_set_t *);
-apr_status_t apr_sd_isset(apr_socket_t *, apr_sd_set_t *);
-void apr_sd_zero(apr_sd_set_t *);
+apr_int32_t apr_poll(apr_pollfd_t *, apr_int32_t, apr_int32_t);
/* accessor functions */
#endif /* ! APR_FILE_IO_H */
1.19 +20 -9 apache-apr/docs/networkio.txt
Index: networkio.txt
===================================================================
RCS file: /home/cvs/apache-apr/docs/networkio.txt,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- networkio.txt 1999/04/27 14:13:37 1.18
+++ networkio.txt 1999/04/28 16:00:09 1.19
@@ -86,16 +86,21 @@
Arguments:
arg 1) The apr_sd_set we are clearing.
- apr_int32_t apr_select(apr_int32 nsd, apr_apr_sd_set_t *readset,
apr_sd_set_t *writeset, apr_sd_set_t *exceptset, struct timeval timeout)
- Monitor sockets for one of three possible conditions.
+ apr_int32_t apr_poll(apr_pollfd_t *, apr_int32_t, apr_int32_t)
+ Monitor sockets for specifiedconditions.
Arguments:
- arg 1) The number of sockets to check. Must be at least one greater
- than the size of the biggest set.
- arg 2) The set of sockets to check for data to read
- arg 3) The set of sockets to check if they are ready for writing.
- arg 4) The set of sockets to check for exceptional conditions.
- arg 5) The length of time to wait until a socket is triggered
- in one of the sets.
+ arg 1) an array of sockets to monitor and events to wait for.
+ valid events are:
+ APR_POLLIN data to be read
+ APR_POLLPRI urgent data to be read
+ APR_POLLOUT a write will not block
+ Only valid in return events:
+ APR_ERR an error occured
+ APR_HUP Hung up
+ APR_NVAL Invalid rquest, socket not open.
+ arg 2) the number of sockets in the array.
+ arg 3) the amount of time in seconds to monitor. 0 means wait
+ until a socket is triggered.
return) Number of file desriptors triggered. 0 means call timed out.
-1 returned on failure.
@@ -234,4 +239,10 @@
char *remote_hostname
struct sockaddr *addr
size_t addr_len
+}
+
+struct apr_pollfd_t {
+ apr_socket_t *sock
+ apr_int16_t events
+ apr_int16_t revents
}