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