summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2002-03-18 22:12:57 +0000
committerDerick Rethans <derick@php.net>2002-03-18 22:12:57 +0000
commit4d65bfe32720a205ed02bc49d11744b5e2dcab21 (patch)
tree7abfd134c028a75d72b2f54dbecddeab4c770ba9
parente2ecf549e19c4af152a3a240f02d72321e234860 (diff)
downloadphp-git-4d65bfe32720a205ed02bc49d11744b5e2dcab21.tar.gz
MFH socket fix
-rw-r--r--ext/standard/fsock.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index 70639dcdc8..05a65b39b5 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -478,6 +478,14 @@ static size_t php_sockread_internal(php_sockbuf *sock)
/* read at a maximum sock->chunk_size */
nr_bytes = recv(sock->socket, buf, sock->chunk_size, 0);
if(nr_bytes > 0) {
+
+ /* try to avoid ever expanding buffer */
+ if (sock->readpos > 0) {
+ memmove(sock->readbuf, READPTR(sock), sock->readbuflen - sock->readpos);
+ sock->writepos -= sock->readpos;
+ sock->readpos = 0;
+ }
+
if(sock->writepos + nr_bytes > sock->readbuflen) {
sock->readbuflen += sock->chunk_size;
sock->readbuf = perealloc(sock->readbuf, sock->readbuflen,