diff options
author | Derick Rethans <derick@php.net> | 2002-03-18 22:12:57 +0000 |
---|---|---|
committer | Derick Rethans <derick@php.net> | 2002-03-18 22:12:57 +0000 |
commit | 4d65bfe32720a205ed02bc49d11744b5e2dcab21 (patch) | |
tree | 7abfd134c028a75d72b2f54dbecddeab4c770ba9 | |
parent | e2ecf549e19c4af152a3a240f02d72321e234860 (diff) | |
download | php-git-4d65bfe32720a205ed02bc49d11744b5e2dcab21.tar.gz |
MFH socket fix
-rw-r--r-- | ext/standard/fsock.c | 8 |
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, |