rbb 99/06/14 05:43:13
Modified: apr/network_io/unix networkio.h poll.c
apr/test server.c
Log:
The rest of the changes for the poll api change. These are not thoroughly
tested, but they work in the bit of testing I have done, and they hide more
of the internal details, so those systems using select don't have to deal with
as much.
Revision Changes Path
1.10 +1 -0 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- networkio.h 1999/05/21 19:53:36 1.9
+++ networkio.h 1999/06/14 12:43:10 1.10
@@ -73,6 +73,7 @@
struct socket_t *sock;
ap_int16_t events;
ap_int16_t revents;
+ int curpos;
};
ap_int16_t get_event(ap_int16_t);
1.12 +23 -6 apache-apr/apr/network_io/unix/poll.c
Index: poll.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/poll.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- poll.c 1999/06/02 18:44:53 1.11
+++ poll.c 1999/06/14 12:43:10 1.12
@@ -68,6 +68,7 @@
return APR_ENOMEM;
}
(*new)->cntxt = cont;
+ (*new)->curpos = 0;
return APR_SUCCESS;
}
@@ -112,11 +113,19 @@
}
ap_status_t ap_add_poll_socket(struct pollfd_t *aprset,
- struct socket_t *sock, ap_int16_t event,
- ap_int32_t pos)
+ struct socket_t *sock, ap_int16_t event)
{
- aprset[pos].sock = sock;
- aprset[pos].events = get_event(event);
+ int i = 0;
+
+ while (i < aprset->curpos && aprset[i].sock->socketdes !=
sock->socketdes) {
+ i++;
+ }
+ if (i >= aprset->curpos) {
+ aprset->curpos++;
+ }
+ aprset[i].sock = sock;
+ aprset[i].events = get_event(event);
+
return APR_SUCCESS;
}
@@ -151,9 +160,17 @@
return APR_SUCCESS;
}
-ap_status_t ap_get_revents(struct pollfd_t *aprset, ap_int32_t pos,
ap_int16_t *event)
+ap_status_t ap_get_revents(struct pollfd_t *aprset, struct socket_t *sock,
ap_int16_t *event)
{
- (*event) = aprset[pos].revents;
+ int i = 0;
+
+ while (i < aprset->curpos && aprset[i].sock->socketdes !=
sock->socketdes) {
+ i++;
+ }
+ if (i >= aprset->curpos) {
+ return APR_INVALSOCK;
+ }
+ (*event) = aprset[i].revents;
return APR_SUCCESS;
}
1.8 +1 -1 apache-apr/apr/test/server.c
Index: server.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/server.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- server.c 1999/05/25 17:03:53 1.7
+++ server.c 1999/06/14 12:43:12 1.8
@@ -122,7 +122,7 @@
fprintf(stdout, "\tServer: Setting up socket for polling.......");
ap_setup_poll(context, 1, &sdset);
- ap_add_poll_socket(sdset, sock, APR_POLLIN, 0);
+ ap_add_poll_socket(sdset, sock, APR_POLLIN);
fprintf(stdout, "OK\n");
fprintf(stdout, "\tServer: Beginning to poll for socket.......");