CVS update: php3/functions

From: Date: Wed, 26 May 1999 12:42:24 +0000
Subject: CVS update: php3/functions
Groups: php.dev 
Request: Send a blank email to php-dev+get-6014@lists.php.net to get a copy of this message
Date: Wednesday May 26, 1999 @ 8:42 Author: sas Update of /repository/php3/functions In directory php:/tmp/cvs-serv10701 Modified Files: file.c fsock.c fsock.h Log Message: blocking and non-blocking sockets should work now Index: php3/functions/file.c diff -u php3/functions/file.c:1.210 php3/functions/file.c:1.211 --- php3/functions/file.c:1.210 Thu May 20 12:34:34 1999 +++ php3/functions/file.c Wed May 26 08:42:24 1999 @@ -26,7 +26,7 @@ | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | +----------------------------------------------------------------------+ */ -/* $Id: file.c,v 1.210 1999/05/20 16:34:34 sas Exp $ */ +/* $Id: file.c,v 1.211 1999/05/26 12:42:24 sas Exp $ */ #ifdef THREAD_SAFE #include "tls.h" #endif @@ -690,6 +690,7 @@ RETURN_FALSE; } socketd=*sock; + _php3_sock_set_blocking(socketd, block == 0 ? 0 : 1); #if WIN32|WINNT /* with ioctlsocket, a non-zero sets nonblocking, a zero sets blocking */ flags=block; Index: php3/functions/fsock.c diff -u php3/functions/fsock.c:1.101 php3/functions/fsock.c:1.102 --- php3/functions/fsock.c:1.101 Wed May 26 08:15:24 1999 +++ php3/functions/fsock.c Wed May 26 08:42:24 1999 @@ -27,7 +27,7 @@ | Jim Winstead (jimw@php.net) | +----------------------------------------------------------------------+ */ -/* $Id: fsock.c,v 1.101 1999/05/26 12:15:24 sas Exp $ */ +/* $Id: fsock.c,v 1.102 1999/05/26 12:42:24 sas Exp $ */ #ifdef THREAD_SAFE #include "tls.h" #endif @@ -316,6 +316,11 @@ #define READPTR(sock) ((sock)->readbuf + (sock)->readpos) #define WRITEPTR(sock) ((sock)->readbuf + (sock)->writepos) +#define SOCK_FIND(sock,socket) \ + php3i_sockbuf *sock; \ + sock = _php3_sock_find(socket); \ + if(!sock) sock = _php3_sock_create(socket) + static php3i_sockbuf *_php3_sock_find(int socket) { php3i_sockbuf *buf = NULL, *tmp; @@ -350,7 +355,7 @@ static size_t _php3_sock_read_limited(php3i_sockbuf *sock, size_t max) { char buf[CHUNK_SIZE]; - size_t nr_bytes; + int nr_bytes; size_t nr_read = 0; if(sock->eof || max > CHUNK_SIZE) return nr_read; @@ -387,16 +392,24 @@ return nr_read; } +int _php3_sock_set_blocking(int socket, int mode) +{ + int old; + SOCK_FIND(sock, socket); + + old = sock->is_blocked; + + sock->is_blocked = mode; + + return old; +} + #define SOCK_FIND_AND_READ \ - php3i_sockbuf *sock; \ - sock = _php3_sock_find(socket); \ - if(!sock) sock = _php3_sock_create(socket); \ + SOCK_FIND(sock,socket); \ _php3_sock_read(sock) #define SOCK_FIND_AND_READ_MAX(max) \ - php3i_sockbuf *sock; \ - sock = _php3_sock_find(socket); \ - if(!sock) sock = _php3_sock_create(socket); \ + SOCK_FIND(sock, socket); \ if(sock->is_blocked) _php3_sock_read_limited(sock, max); else _php3_sock_read(sock) size_t _php3_sock_fgets(char *buf, size_t maxlen, int socket) @@ -404,8 +417,15 @@ char *p; size_t ret = 0; size_t amount = 0; - SOCK_FIND_AND_READ_MAX(maxlen); - + size_t nr_read; + SOCK_FIND_AND_READ_MAX(1); + + if(sock->is_blocked) { + for(nr_read = 1; !sock->eof && nr_read < maxlen; ) { + nr_read += _php3_sock_read_limited(sock, 1); + } + } + p = memchr(READPTR(sock), '\n', MIN(TOREAD(sock), maxlen - 1)); if(p) { amount = (ptrdiff_t) p - (ptrdiff_t) READPTR(sock) + 1; Index: php3/functions/fsock.h diff -u php3/functions/fsock.h:1.18 php3/functions/fsock.h:1.19 --- php3/functions/fsock.h:1.18 Thu May 20 13:40:43 1999 +++ php3/functions/fsock.h Wed May 26 08:42:24 1999 @@ -27,7 +27,7 @@ | Jim Winstead (jimw@php.net) | +----------------------------------------------------------------------+ */ -/* $Id: fsock.h,v 1.18 1999/05/20 17:40:43 sas Exp $ */ +/* $Id: fsock.h,v 1.19 1999/05/26 12:42:24 sas Exp $ */ #ifndef _FSOCK_H #define _FSOCK_H @@ -43,5 +43,7 @@ int _php3_sock_feof(int socket); int _php3_sock_fgetc(int socket); int _php3_is_persistent_sock(int); +int _php3_sock_set_blocking(int socket, int mode); + #endif /* _FSOCK_H */ -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#6014) next »