ID:               29560
 Comment by:       master_tip at hotmail dot com
 Reported By:      info at tphnet dot com
 Status:           Open
 Bug Type:         Sockets related
 Operating System: Windows XP SP1
 PHP Version:      5.0.0
 New Comment:

hi i'm docey,

i'm also writing a cli app that used a multi-client socket functions.
at first i was using the deprecated socket functions and indeed found a
memory leak. so i started re-writing my socket functions to use the
almost similair stream functions. my aim was a simple interface in the
some how complicated socket programming stuff. but i think i found a
new part on this memory leak. 

the script is running cli on windows2000sp4 with php5.01(latest) and
all works fine i can even have a short chat with myself using two
telnet windows and then it happens. when i close the first telnet
window php start eating memory rapidly and within a minute it grows
from 6mb to 11mb but when i close the second telnet window it stops
eating memory. the script is running quite a lot of loops per minute
about 30000 i guese so there be a lot of socket_accepts and
stream_switch when there is nothing else to do. 

the script is programmed to select a random function from a predefined
list if there is no other function to be run. so a lot of checks are
done. could it be something in the way telnet closed a connection. i'm
using the standard telnet client in the windows2000 prompt. or is there
a problem with stream_switch. i have checked if the script is not
storing variables as an idiot in the arrays because that would eat a
lot of memory too. 

also i haven't checked it with more then 2 clients running. and now i'm
thinking when a client rapidly departs and php could not unset the
socket form the list yet, and stream_switch would run over the sockets
gathering new info. maybe stream_switch would be causing this because
it sees an dead connection and can't handle with it. 

anyway, this is my story to the socket memory leak. if any of you have
any ideas whats causing these leaks. i'm not the only one who's pleased
to hear it(i hope, my c++ is not that good anymore). 

docey, the netherlands.

ps. sorry for my broken english.


Previous Comments:
------------------------------------------------------------------------

[2004-08-09 02:04:14] info at tphnet dot com

Tested using:

PHP 5.1.0-dev (cli) (built: Aug  8 2004 16:31:06)

The memory leak is still there, as described in my previous reply.

------------------------------------------------------------------------

[2004-08-08 01:47:37] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip

Try a snapshot, as a couple of peername related bugs were fixed
recently.

------------------------------------------------------------------------

[2004-08-07 19:23:22] info at tphnet dot com

I can confirm the memory leak that I described in my original bug
report has disappeard.

BUT, I found a new memory leak inside the stream_socket_accept()
function. If you set the third argument peername to a variable, the
function will leak a little bit of memory everytime it's called. The
effect is the same as with the original bug in socket_accpet().
Just modify the example in my previous reply by changing

$new_connection = @stream_socket_accept($socket, 0);

into

$new_connection = @stream_socket_accept($socket, 0, $peer);

and see what happens. In my case (Windows XP, php 5.0.0 CLI) the script
starts leaking memory.

------------------------------------------------------------------------

[2004-08-07 17:55:35] info at tphnet dot com

I changed to code to the following:

<?php

$socket = stream_socket_server('tcp://localhost:1234', $errno,
$errstr);
stream_set_blocking($socket, 0);

        while(true){
                        
                $new_connection = @stream_socket_accept($socket, 0);
                        
                unset($new_connection);}

?>

There is no memory leak anymore and everything is working as expected.
It appears the problem is solved.

------------------------------------------------------------------------

[2004-08-07 15:07:44] [EMAIL PROTECTED]

Urgh, ignore that (clicked wrong link).
The sockets extension is unmaintained.
Try stream_socket_create() and fiends instead.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/29560

-- 
Edit this bug report at http://bugs.php.net/?id=29560&edit=1

Reply via email to