manoj 99/06/01 14:36:03
Modified: pthreads/src/main buff.c
Log:
Clean out the WIN32, etc. code in the buff routines. This lets us get
rid of a few layers of function calls too, and the Windows, etc.
functionality will be put back with the portable runtime work.
Revision Changes Path
1.9 +13 -250 apache-apr/pthreads/src/main/buff.c
Index: buff.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/buff.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -u -r1.8 -r1.9
--- buff.c 1999/05/07 06:57:50 1.8
+++ buff.c 1999/06/01 21:36:03 1.9
@@ -119,120 +119,10 @@
* futher I/O will be done
*/
-#ifdef WIN32
-
-/*
- select() sometimes returns 1 even though the write will block. We must
work around this.
-*/
-
-static int sendwithtimeout(int sock, const char *buf, int len, int flags,
int sec)
+static int sendwithtimeout(int sock, const char *buf, int len, time_t sec)
{
- int iostate = 1;
fd_set fdset;
struct timeval tv;
- int err = WSAEWOULDBLOCK;
- int rv;
- int retry;
-
- if (!(tv.tv_sec = ap_check_alarm()))
- return (send(sock, buf, len, flags));
-
- rv = ioctlsocket(sock, FIONBIO, &iostate);
- iostate = 0;
- if (rv) {
- err = WSAGetLastError();
- ap_assert(0);
- }
- rv = send(sock, buf, len, flags);
- if (rv == SOCKET_ERROR) {
- err = WSAGetLastError();
- if (err == WSAEWOULDBLOCK)
- do {
- retry=0;
-
- FD_ZERO(&fdset);
- FD_SET(sock, &fdset);
- tv.tv_usec = 0;
- rv = select(FD_SETSIZE, NULL, &fdset, NULL, &tv);
- if (rv == SOCKET_ERROR)
- err = WSAGetLastError();
- else if (rv == 0) {
- ioctlsocket(sock, FIONBIO, &iostate);
- if(ap_check_alarm() < 0) {
- WSASetLastError(EINTR); /* Simulate an alarm() */
- return (SOCKET_ERROR);
- }
- }
- else {
- rv = send(sock, buf, len, flags);
- if (rv == SOCKET_ERROR) {
- err = WSAGetLastError();
- if(err == WSAEWOULDBLOCK) {
- ap_log_error(APLOG_MARK,APLOG_DEBUG,NULL,
- "select claimed we could write, but in fact we
couldn't. This is a bug in Windows.");
- retry=1;
- Sleep(100);
- }
- }
- }
- } while(retry);
- }
- ioctlsocket(sock, FIONBIO, &iostate);
- if (rv == SOCKET_ERROR)
- WSASetLastError(err);
- return (rv);
-}
-
-
-static int recvwithtimeout(int sock, char *buf, int len, int flags, int sec)
-{
- int iostate = 1;
- fd_set fdset;
- struct timeval tv;
- int err = WSAEWOULDBLOCK;
- int rv;
-
- if (!(tv.tv_sec = ap_check_alarm()))
- return (recv(sock, buf, len, flags));
-
- rv = ioctlsocket(sock, FIONBIO, &iostate);
- iostate = 0;
- ap_assert(!rv);
- rv = recv(sock, buf, len, flags);
- if (rv == SOCKET_ERROR) {
- err = WSAGetLastError();
- if (err == WSAEWOULDBLOCK) {
- FD_ZERO(&fdset);
- FD_SET(sock, &fdset);
- tv.tv_usec = 0;
- rv = select(FD_SETSIZE, &fdset, NULL, NULL, &tv);
- if (rv == SOCKET_ERROR)
- err = WSAGetLastError();
- else if (rv == 0) {
- ioctlsocket(sock, FIONBIO, &iostate);
- ap_check_alarm();
- WSASetLastError(WSAEWOULDBLOCK);
- return (SOCKET_ERROR);
- }
- else {
- rv = recv(sock, buf, len, flags);
- if (rv == SOCKET_ERROR)
- err = WSAGetLastError();
- }
- }
- }
- ioctlsocket(sock, FIONBIO, &iostate);
- if (rv == SOCKET_ERROR)
- WSASetLastError(err);
- return (rv);
-}
-
-#else
-
-static int sendwithtimeout(int sock, const char *buf, int len, int flags,
time_t sec)
-{
- fd_set fdset;
- struct timeval tv;
int err = EAGAIN;
int rv;
@@ -264,7 +154,7 @@
return (rv);
}
-static int recvwithtimeout(int sock, char *buf, int len, int flags, time_t
sec)
+static int recvwithtimeout(int sock, char *buf, int len, time_t sec)
{
fd_set fdset;
struct timeval tv;
@@ -300,101 +190,6 @@
return (rv);
}
-#endif /* WIN32 */
-
-
-/* the lowest level reading primitive */
-static int ap_read(BUFF *fb, void *buf, int nbyte)
-{
- int rv;
-
-#ifdef WIN32
- if (fb->hFH != INVALID_HANDLE_VALUE) {
- if (!ReadFile(fb->hFH,buf,nbyte,&rv,NULL))
- rv = -1;
- }
- else
-#endif
- rv = read(fb->fd_in, buf, nbyte);
-
- return rv;
-}
-
-static ap_inline int buff_read(BUFF *fb, void *buf, int nbyte, time_t sec)
-{
- int rv;
-
-#if defined (WIN32)
- if (fb->flags & B_SOCKET) {
- rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0, sec);
- if (rv == SOCKET_ERROR)
- errno = WSAGetLastError();
- }
- else
- rv = ap_read(fb, buf, nbyte);
-#elif defined(TPF)
- fd_set fds;
- struct timeval tv;
-
- tpf_process_signals();
- if (fb->flags & B_SOCKET) {
- alarm(rv = alarm(0));
- FD_ZERO(&fds);
- FD_SET(fb->fd_in, &fds);
- tv.tv_sec = rv+1;
- tv.tv_usec = 0;
- rv = ap_select(fb->fd_in + 1, &fds, NULL, NULL, &tv);
- if (rv < 1) {
- tpf_process_signals();
- return(rv);
- }
- }
- rv = ap_read(fb, buf, nbyte);
-#else
- rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0, sec);
-#endif /* WIN32 */
- return rv;
-}
-
-/* the lowest level writing primitive */
-static int ap_write(BUFF *fb, const void *buf, int nbyte)
-{
- int rv;
-
-#ifdef WIN32
- if (fb->hFH != INVALID_HANDLE_VALUE) {
- if (!WriteFile(fb->hFH,buf,nbyte,&rv,NULL))
- rv = -1;
- }
- else
-#endif
-#if defined (B_SFIO)
- rv = sfwrite(fb->sf_out, buf, nbyte);
-#else
- rv = write(fb->fd, buf, nbyte);
-#endif
-
- return rv;
-}
-
-static ap_inline int buff_write(BUFF *fb, const void *buf, int nbyte, time_t
sec)
-{
- int rv;
-
-#if defined(WIN32)
- if (fb->flags & B_SOCKET) {
- rv = sendwithtimeout(fb->fd, buf, nbyte, 0, sec);
- if (rv == SOCKET_ERROR)
- errno = WSAGetLastError();
- }
- else
- rv = ap_write(fb, buf, nbyte);
-#else
- rv = sendwithtimeout(fb->fd, buf, nbyte, 0, sec);
-#endif /* WIN32 */
- return rv;
-}
-
static void doerror(BUFF *fb, int direction)
{
int errsave = errno; /* Save errno to prevent overwriting it below */
@@ -445,9 +240,6 @@
fb->fd = -1;
fb->fd_in = -1;
-#ifdef WIN32
- fb->hFH = INVALID_HANDLE_VALUE;
-#endif
#ifdef B_SFIO
fb->sf_in = NULL;
@@ -470,16 +262,6 @@
fb->fd_in = fd_in;
}
-#ifdef WIN32
-/*
- * Push some Win32 handles onto the stream.
- */
-API_EXPORT(void) ap_bpushh(BUFF *fb, HANDLE hFH)
-{
- fb->hFH = hFH;
-}
-#endif
-
API_EXPORT(int) ap_bsetopt(BUFF *fb, int optname, const void *optval)
{
if (optname == BO_BYTECT) {
@@ -665,7 +447,7 @@
*/
-#if !defined (B_SFIO) || defined (WIN32)
+#if !defined (B_SFIO)
#define saferead saferead_guts
#else
static int saferead(BUFF *fb, char *buf, int nbyte, time_t sec)
@@ -716,7 +498,7 @@
ap_bhalfduplex(fb);
}
do {
- rv = buff_read(fb, buf, nbyte, sec);
+ rv = recvwithtimeout(fb->fd_in, buf, nbyte, sec);
} while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT));
return (rv);
}
@@ -759,7 +541,7 @@
/* A wrapper around saferead which does error checking and EOF checking
- * yeah, it's confusing, this calls saferead, which calls buff_read...
+ * yeah, it's confusing, this calls saferead, which calls recvwithtimeout...
* and then there's the SFIO case. Note that saferead takes care
* of EINTR.
*/
@@ -1101,7 +883,7 @@
return -1;
while (nbyte > 0) {
- i = buff_write(fb, buf, nbyte, sec);
+ i = sendwithtimeout(fb->fd, buf, nbyte, sec);
if (i < 0) {
if (errno != EAGAIN && errno != EINTR) {
doerror(fb, B_WR);
@@ -1166,7 +948,7 @@
}
#endif
-/* A wrapper for buff_write which deals with error conditions and
+/* A wrapper for sendwithtimeout which deals with error conditions and
* bytes_sent. Also handles non-blocking writes.
*/
static int write_with_errors(BUFF *fb, const void *buf, int nbyte, time_t
sec)
@@ -1174,7 +956,7 @@
int rv;
do
- rv = buff_write(fb, buf, nbyte, sec);
+ rv = sendwithtimeout(fb->fd, buf, nbyte, sec);
while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT));
if (rv == -1) {
if (errno != EAGAIN) {
@@ -1516,33 +1298,14 @@
if (fb->flags & B_WR)
rc1 = ap_bflush(fb);
else
- rc1 = 0;
-#ifdef WIN32
- if (fb->flags & B_SOCKET) {
- rc2 = ap_pclosesocket(fb->pool, fb->fd);
- if (fb->fd_in != fb->fd) {
- rc3 = ap_pclosesocket(fb->pool, fb->fd_in);
- }
- else {
- rc3 = 0;
- }
+ rc1 = 0;
+ rc2 = ap_pclosef(fb->pool, fb->fd);
+ if (fb->fd_in != fb->fd) {
+ rc3 = ap_pclosef(fb->pool, fb->fd_in);
}
- else if (fb->hFH != INVALID_HANDLE_VALUE) {
- rc2 = ap_pcloseh(fb->pool, fb->hFH);
- rc3 = 0;
- }
else {
-#endif
- rc2 = ap_pclosef(fb->pool, fb->fd);
- if (fb->fd_in != fb->fd) {
- rc3 = ap_pclosef(fb->pool, fb->fd_in);
- }
- else {
- rc3 = 0;
- }
-#ifdef WIN32
+ rc3 = 0;
}
-#endif
fb->inptr = fb->inbase;
fb->incnt = 0;