#20317 [Opn->Fbk]: memory leak by socket_sendto()
| From: | derick@php.net | Date: | Fri, 08 Nov 2002 18:28:53 +0000 |
| Subject: | #20317 [Opn->Fbk]: memory leak by socket_sendto() | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-24370@lists.php.net to get a copy of this message | ||
ID: 20317
Updated by: derick@php.net
Reported By: apan@multidas.com
-Status: Open
+Status: Feedback
Bug Type: Sockets related
Operating System: Redhat Linux 7.3
PHP Version: 4.2.1
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php4-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-latest.zip
Previous Comments:
------------------------------------------------------------------------
[2002-11-08 12:24:35] apan@multidas.com
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to
allocate 46080 bytes) in /usr/local/apache/htdocs/login.php on line 88,
which is the line with socket_sendto()
Here is the code:
Basically it sends a UDP request to authmsgque service,
and expect it receive some response back.
$address = gethostbyname ('localhost');
$service_port = getservbyname ('authmsgque', 'udp');
/* Create a TCP/IP socket. */
$socket = socket_create (AF_INET, SOCK_DGRAM, 0);
if ($socket < 0) {
// echo "socket_create() failed: reason: " . socket_strerror
($socket) . "<br>\n";
} else {
// echo "socket_create() OK.<br>\n";
}
// echo "Attempting to connect to '$address' on port
'$service_port'...<br>\n";
$outbuf = "abc+++cde";
for ($i = 1; $i <= 3; $i++) {
$result = socket_sendto ( $socket, $outbuf, strlen($outbuf), 0,
$address , $service_port );
if ($result < 0) {
// echo "socket_sendto() failed.\nReason: ($result) " .
socket_strerror($result) . "<br>\n";
} else {
// echo "socket_sendto() OK.<br>\n";
}
$inbuf = "NO RESPONSE";
$remote_address = "abc";
$remote_port = 100;
echo "Reading response:<br>\n\n";
$result2 = 0;
/* Prepare the read array */
$read = array($socket);
if (false == ($num_changed_sockets = socket_select($read,
$write = NULL, $except = NULL, 5)))
/* Error handling */
;
// echo "socket_select() failed.\nReason: timeout <br>\n";
else if ($num_changed_sockets > 0) {
/* At least at one of the sockets something interesting
happened */
$result2 = socket_recvfrom ( $socket, $inbuf, 1024, 0,
$remote_address, $remote_port );
// echo "result2 : ".$result2."<br>\n";
// echo "remote_address : ".$remote_address."<br>\n";
// echo "remote_port : ".$remote_port."<br>\n";
// echo "received buffer : ".$inbuf."<br>\n";
if ( $result2 > 0 && strcmp($inbuf,"NO RESPONSE") != 0 )
break;
}
}
socket_close ($socket);
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20317&edit=1