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.......");