ID: 29560 Updated by: [EMAIL PROTECTED] Reported By: info at tphnet dot com -Status: Open +Status: Feedback Bug Type: Sockets related Operating System: Windows XP SP1 PHP Version: 5.0.0 New Comment:
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 Previous Comments: ------------------------------------------------------------------------ [2004-09-18 01:49:34] master_tip at hotmail dot com 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. ------------------------------------------------------------------------ [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. ------------------------------------------------------------------------ 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