CVS update: php3/functions
| From: | sas | Date: | Fri, 18 Jun 1999 12:13:05 +0000 |
| Subject: | CVS update: php3/functions | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-7070@lists.php.net to get a copy of this message | ||
Date: Friday June 18, 1999 @ 8:13
Author: sas
Update of /repository/php3/functions
In directory php:/tmp/cvs-serv6789/functions
Modified Files:
fsock.c
Log Message:
fix socket stuff - file() do work now
Index: php3/functions/fsock.c
diff -u php3/functions/fsock.c:1.119 php3/functions/fsock.c:1.120
--- php3/functions/fsock.c:1.119 Wed Jun 16 07:34:19 1999
+++ php3/functions/fsock.c Fri Jun 18 08:13:04 1999
@@ -27,7 +27,7 @@
| Jim Winstead (jimw@php.net) |
+----------------------------------------------------------------------+
*/
-/* $Id: fsock.c,v 1.119 1999/06/16 11:34:19 ssb Exp $ */
+/* $Id: fsock.c,v 1.120 1999/06/18 12:13:04 sas Exp $ */
#ifdef THREAD_SAFE
#include "tls.h"
#endif
@@ -477,16 +477,33 @@
#define CHUNK_SIZE 2048
#define MAX_CHUNKS_PER_READ 10
+static void _php3_sock_wait_for_data(php3i_sockbuf *sock)
+{
+ fd_set fdr, tfdr;
+
+ FD_ZERO(&fdr);
+ FD_SET(sock->socket, &fdr);
+
+ while(1) {
+ tfdr = fdr;
+ if(select(sock->socket + 1, &tfdr, NULL, NULL, NULL) == 1) break;
+ }
+}
-static size_t _php3_sock_read_limited(php3i_sockbuf *sock, size_t max)
+static size_t _php3_sock_read_limited(php3i_sockbuf *sock, int maxread)
{
char buf[CHUNK_SIZE];
int nr_bytes;
size_t nr_read = 0;
- if(sock->eof || max > CHUNK_SIZE) return nr_read;
+ if(sock->eof || TOREAD(sock) >= maxread)
+ return 0;
+
+ if(sock->is_blocked) {
+ _php3_sock_wait_for_data(sock);
+ }
- nr_bytes = recv(sock->socket, buf, max, 0);
+ nr_bytes = recv(sock->socket, buf, CHUNK_SIZE, 0);
if(nr_bytes > 0) {
if(sock->writepos + nr_bytes > sock->readbuflen) {
sock->readbuflen += CHUNK_SIZE;
@@ -503,32 +520,6 @@
return nr_read;
}
-#if !defined(MSG_DONTWAIT) && defined(__GLIBC__) && __GLIBC__ == 2
-#define MSG_DONTWAIT 0x40
-#endif
-
-/* only for blocking sockets */
-static size_t _php3_sock_queued_data(php3i_sockbuf *sock)
-{
- int nr_bytes;
- char buf[CHUNK_SIZE];
- int flags = MSG_PEEK;
-
-#ifdef MSG_DONTWAIT
- flags |= MSG_DONTWAIT;
-#else
- _php3_set_sock_blocking(sock->socket, 1);
-#endif
-
- nr_bytes = recv(sock->socket, buf, CHUNK_SIZE, flags);
-
-#ifndef MSG_DONTWAIT
- _php3_set_sock_blocking(sock->socket, 0);
-#endif
-
- return (nr_bytes < 0 ? 0 : nr_bytes);
-}
-
static size_t _php3_sock_read(php3i_sockbuf *sock)
{
size_t nr_bytes;
@@ -576,12 +567,11 @@
if(maxlen < 0) return ret;
if(sock->is_blocked) {
- nr_toread = _php3_sock_queued_data(sock);
- if(!nr_toread) nr_toread = 1;
+ nr_toread = 0;
for(nr_read = 1; !sock->eof && nr_read < maxlen; ) {
nr_read += _php3_sock_read_limited(sock, nr_toread);
if((p = memchr(READPTR(sock), '\n', TOREAD(sock))) != NULL) break;
- nr_toread = 1;
+ nr_toread = 512;
}
} else {
_php3_sock_read(sock);
@@ -631,7 +621,7 @@
int _php3_sock_feof(int socket)
{
int ret = 0;
- SOCK_FIND_AND_READ_MAX(1);
+ SOCK_FIND(sock, socket);
if(!TOREAD(sock) && sock->eof)
ret = 1;