php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #33127 fsockopen memory leak
Submitted: 2005-05-24 16:43 UTC Modified: 2005-05-25 11:25 UTC
From: joropito at ciudad dot com dot ar Assigned:
Status: Not a bug Package: Sockets related
PHP Version: 5.0.4 OS: FreeBSD 5.3/4
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: joropito at ciudad dot com dot ar
New email:
PHP Version: OS:

 

 [2005-05-24 16:43 UTC] joropito at ciudad dot com dot ar
Description:
------------
I see that fsockopen() causes a memory leak although of closing filedescriptor.

Reproduce code:
---------------
  system("/bin/ps -maxwvj -p ".posix_getpid());
  $fd = fsockopen("www.yahoo.com", 80, $errno, $errstr, 3);
  system("/bin/ps -maxwvj -p ".posix_getpid());
  if($fd) {
    $out = "GET / HTTP/1.1\nHost: www.yahoo.comConnection: Close\n\n";
    fwrite($fd, $out);
    $line = "";
    while (!feof ($fd)) {
      $lastline = fgets($fd);
      $line .= $lastline;
      if(ereg("Content-Type: text/html", $lastline)) { break; }
    }
    fclose($fd);
    echo $line;
  }
  system("/bin/ps -maxwvj -p ".posix_getpid());
  sleep(5);



Expected result:
----------------
You will see after issue fsockopen() memory usage rises, and if you issue fclose() does not free memory.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-05-24 16:50 UTC] joropito at ciudad dot com dot ar
Reproducible under php-4.3.9

Smaller reproducible code

<?php
  system("/bin/ps -l -p ".posix_getpid());
  $fd = fsockopen("www.yahoo.com", 80, $errno, $errstr, 3);
  system("/bin/ps -l -p ".posix_getpid());
  if($fd) fclose($fd);
  system("/bin/ps -l -p ".posix_getpid());
?>
 [2005-05-24 18:10 UTC] joropito at ciudad dot com dot ar
It's related to any network interaction.
Reproducible with
mysql_connect
file_get_contents (http wrapper)
fsockopen
 [2005-05-24 22:27 UTC] wez@php.net
How are you measuring this?
 [2005-05-25 00:56 UTC] joropito at ciudad dot com dot ar
This example code show initial and final memory usage. I'm wrong? It doesnt free all resources.
My cli application makes an infitite loop, and every time it tries to use network resources, memory usage increases and after some time no more memory available.

<?php
echo memory_get_usage()."\n";
$db = mysql_connect("dbhost", "dbuser", "dbpass");
mysql_close($db);
unset($db)
echo memory_get_usage()."\n";
?>
 [2005-05-25 11:25 UTC] sniper@php.net
Yes, this is just how resources in PHP works. No bug here.

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 26 12:01:30 2024 UTC