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;
           }
  
  
  

Reply via email to