php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #22263 socket_read() crashes on client close
Submitted: 2003-02-17 23:51 UTC Modified: 2003-07-21 01:29 UTC
Votes:2
Avg. Score:4.0 ± 1.0
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:2 (100.0%)
From: caesar_iv4 at yahoo dot com Assigned:
Status: No Feedback Package: Sockets related
PHP Version: 4.3.2-dev OS: win 98 SE
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2003-02-17 23:51 UTC] caesar_iv4 at yahoo dot com
I use php 4.3.2 latest cvs 
even php 5 and it stil occurs

i am trying to write a small php-based httpdeamon and when i was testing it with IE6, open the connection and the page starts loading, but when i click on stop i get the usual crashed program box

here's the script:
<?
function& sock() {
	global $SRV;
	if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0)
		sock_err($sock,"socket_create()");
	if (($ret = socket_bind ($sock, $SRV["IP"], $SRV["PORT"])) < 0)
		sock_err($sock,"socket_bind()");
	if (($ret = socket_listen ($sock, $SRV["MAX_CL"])) < 0)
		sock_err($sock,"socket_listen()");
	return $sock;
}
function send(&$sock,$msg,$echo=true) {
	global $CORE_DUMP;
//	socket_write($sock,$msg,strlen($msg));
	fwrite($CORE_DUMP,$msg,strlen($msg));
	if($echo)
		echo $msg;
}
function log_access($ip) {
	global $LOG_ACCESS;
	$str = date("r")."  ".$ip."\n";
	fwrite($LOG_ACCESS,$str,strlen($str));
}
function sock_err(&$sock,$fn) {
	global $LOG_ERROR;
	$str = $fn." failed, reason: ".socket_strerror(socket_last_error($sock));
	echo $str;
	fwrite($LOG_ERROR,$str,strlen($str));
}

error_reporting (E_ALL); 

set_time_limit (0);
ob_implicit_flush();
echo "07\n";
$sock = &sock();
echo "09\n";
do {
	echo "11\n";
	if (($msgsock = socket_accept(@$sock)) < 0)
		sock_err(@$msgsock,"socket_accept()");
	echo "14\n";
	socket_getpeername(@$msgsock,$ip);
	echo "15\n";
	log_access($ip);
	echo "16\n";
	$str = "";
	echo "18\n";
	$i = 0;
	echo "20\n";
	while ($msgsock) {
		echo "23\n";
		if (!$msgsock)
			break;
		echo $msgsock;
		$buf = socket_read($msgsock, 2048, PHP_BINARY_READ);
		echo "25\n";
		if (!$buf) { 
			sock_err(@$msgsock,"socket_read()");
			break;
		}
		echo "26\n";
		echo "28\n";
	} 
	echo "38\n";
	socket_close (@$msgsock);
	echo "40\n";
} while (@$sock);

socket_close (@$sock); 
?>

the echoes were to pin-point the problem


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-03-18 12:36 UTC] wez@php.net
Please try using this CVS snapshot:

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

Can't reproduce using supplied script + latest CVS for 4.3.2 under winxp.

Please be more specific about the error and where the script fails.

It would also help if we don't have to fill in the other half of your script - please try to paste a script that reproduces the problem, preferably around 10 lines in length.

 [2003-03-21 22:01 UTC] caesar_iv4 at yahoo dot com
wez
i don't know wheather you read the title
but the script crashes at
$buf = socket_read($msgsock, 2048, PHP_BINARY_READ);
whenever i close the connection using IE6 on Windows 98
 [2003-07-16 12:36 UTC] pollita@php.net
As Wez mentioned your script is incomplete.

You havn't defined the $SRV structure.
  Sure we could guess at valid values, but it's important we know what YOU'RE attempting to pass.

Your socket_connect() line is simply wrong.
  Check the manual.

Also, when providing a reproducing script, only provide as much as is necessary to reproduce the problem.  This means NO watchpoints, NO commented out code lines, NO logging functions.  The only time pieces of the above should be including in a reproducing script is when they are necessary to cause the error.  In your case, they aren't.

Finally, I'd like to ask if you've been able to reproduce this on any other platforms.  Win2K? XP? 95? NT4? NT3? Any variant of unix?

Thank you for your time and effort and I hope that together we can locate and deal with this problem.
 [2003-07-16 16:56 UTC] caesar_iv4 at yahoo dot com
here is the missing $SRV variable:



$SRV	=	array(
			"SRVROOT"	=>	"C:/desktop/phpfiles/projects/httpd/",
			"DOCROOT"	=>	"C:/desktop/phpfiles/projects/httpd/docs/",
			"IP"		=>	"127.0.0.1",
			"HOST"		=>	"loclahost",
			"PORT"		=>	80,
			"LOG"		=>	array(
							"ACCESS"=>	"C:/desktop/phpfiles/projects/httpd/log_access.txt",
							"ERROR"	=>	"C:/desktop/phpfiles/projects/httpd/log_error.txt",
							"DUMP"	=>	"C:/desktop/phpfiles/projects/httpd/dump"
							),
			"MAX_CL"	=>	3,
			"DIR_INDEX"	=>	array(
							"index.html",
							"index.htm"
							),
			"READ_BYTES"=>	33
);
 [2003-07-16 20:49 UTC] sniper@php.net
PLEASE read what pollita@php.net said in her comment before you add any new comments. Your script is pretty much useless to us. Provide the shortest but _complete_ example script which we can copy'n'paste to a file and with only minor changes run ourselves.

 [2003-07-21 01:29 UTC] sniper@php.net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.


 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Mon Nov 29 02:03:14 2021 UTC