CVS update: php3/functions

From: 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;

« previous php.dev (#7070) next »