#29560 [Fbk->Opn]: Listening on non-blocking socket leaks memory

2004-08-08 Thread info at tphnet dot com
 ID:   29560
 User updated by:  info at tphnet dot com
 Reported By:  info at tphnet dot com
-Status:   Feedback
+Status:   Open
 Bug Type: Sockets related
 Operating System: Windows XP SP1
 PHP Version:  5.0.0
 New Comment:

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.


Previous Comments:


[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:



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.



[2004-08-07 14:50:11] [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



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


#29560 [Fbk->Opn]: Listening on non-blocking socket leaks memory

2004-08-07 Thread info at tphnet dot com
 ID:   29560
 User updated by:  info at tphnet dot com
 Reported By:  info at tphnet dot com
-Status:   Feedback
+Status:   Open
 Bug Type: Sockets related
 Operating System: Windows XP SP1
 PHP Version:  5.0.0
 New Comment:

I changed to code to the following:



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


Previous Comments:


[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.



[2004-08-07 14:50:11] [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



[2004-08-07 03:01:35] info at tphnet dot com

Description:

I've been trying to write a simple multi-client server application in
PHP. Everything is working just fine, the only problem is that the
server is leaking memory.

Reproduce code:
---
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_bind($socket, 'localhost', 1234);
socket_listen($socket);
socket_set_nonblock($socket);

while(true){

$new_connection = @socket_accept($socket);
unset($new_connection);
}

Expected result:

The above server will accept connections on localhot:1234 and will
disconnect you directly after you connect.
The socket is setup in non-blocking mode, so that with a couple of
minor modifications it becomes possible to handle multiple clients at
the same time.


Actual result:
--
The code does exactly what it is supposed to do, but its memory use
increases very fast. It fills up my 512 megs in about a minute.

The memory leak occours in the socket_accept() function. Removing this
line will stop the memory leak from occouring. 
If you remove the socket_set_nonblock() function it also does not leak
memory anymore. This seems kind of logical because the script will
"hang" on the socket_accept() function instead of looping over it
constantly.

In the version of the script I'm actually using, a "usleep(10)" has
been added in the while loop to make sure the script doesn't consume all
available resources, but the memory leak still remains. Although it
takes much longer to fill all memory because socket_accept() is called
less frequent.

Removing the "@" sign infront of the socket_accept() function causes
the following two errors to be printed on the console for every call to
socket_accpet():

Warning: socket_accept(): unable to accept incoming connection [0]: Een
niet-blokkerende socketbewerking kan niet onmiddellijk worden voltooid.
Warning: socket_accept(): unable to accept socket connection [0]: De
bewerking is voltooid.

The first error roughly translates to "A non-blocking socket action
cannot be executed immediately" and the second to "The action has been
completed".

I'm not really an expert on sockets so I'm not sure if my script is
just flawed or this is a real bug. I've used the above code in a
somewhat more advanced form to create a small POP3 server. This server
is functioning just fine, the only problem is that it is leaking
memory.





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