CVS update: php3/functions
| From: | sas | 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