bjh 99/10/18 04:06:39
Modified: src/lib/apr/network_io/os2 sendrecv.c Log: OS/2: Change timeout style in ap_send()/ap_receive() and change to use native thread safe select() instead of the EMX library's select(). Revision Changes Path 1.2 +23 -22 apache-2.0/src/lib/apr/network_io/os2/sendrecv.c Index: sendrecv.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/os2/sendrecv.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- sendrecv.c 1999/08/17 15:59:43 1.1 +++ sendrecv.c 1999/10/18 11:06:38 1.2 @@ -59,9 +59,10 @@ #include "apr_errno.h" #include "apr_general.h" #include "apr_network_io.h" +#include "apr_lib.h" #include <sys/time.h> -ap_status_t ap_send(struct socket_t *sock, const char *buf, ap_ssize_t *len, time_t sec) +ap_status_t ap_send(struct socket_t *sock, const char *buf, ap_ssize_t *len) { ssize_t rv; @@ -69,21 +70,20 @@ rv = write(sock->socketdes, buf, (*len)); } while (rv == -1 && errno == EINTR); - if (rv == -1 && errno == EAGAIN && sec > 0) { - struct timeval tv; - fd_set fdset; + if (rv == -1 && errno == EAGAIN && sock->timeout > 0) { + int fds; int srv; do { - FD_ZERO(&fdset); - FD_SET(sock->socketdes, &fdset); - tv.tv_sec = sec; - tv.tv_usec = 0; - - srv = select(FD_SETSIZE, NULL, &fdset, NULL, &tv); + fds = sock->socketdes; + srv = os2_select(&fds, 0, 1, 0, sock->timeout); } while (srv == -1 && errno == EINTR); - if (srv < 1) { + if (srv == 0) { + (*len) = -1; + return APR_TIMEUP; + } + else if (srv < 0) { (*len) = -1; return errno; } @@ -96,8 +96,10 @@ (*len) = rv; return APR_SUCCESS; } + -ap_status_t ap_recv(struct socket_t *sock, char *buf, ap_ssize_t *len, time_t sec) + +ap_status_t ap_recv(struct socket_t *sock, char *buf, ap_ssize_t *len) { ssize_t rv; @@ -105,21 +107,20 @@ rv = read(sock->socketdes, buf, (*len)); } while (rv == -1 && errno == EINTR); - if (rv == -1 && errno == EAGAIN && sec > 0) { - struct timeval tv; - fd_set fdset; + if (rv == -1 && errno == EAGAIN && sock->timeout > 0) { + int fds; int srv; do { - FD_ZERO(&fdset); - FD_SET(sock->socketdes, &fdset); - tv.tv_sec = sec; - tv.tv_usec = 0; - - srv = select(FD_SETSIZE, &fdset, NULL, NULL, &tv); + fds = sock->socketdes; + srv = os2_select(&fds, 1, 0, 0, sock->timeout); } while (srv == -1 && errno == EINTR); - if (srv < 1) { + if (srv == 0) { + (*len) = -1; + return APR_TIMEUP; + } + else if (srv < 0) { (*len) = -1; return errno; }