#22263 [Opn->Asn]: socket_read() crashes on client close

From: Date: Wed, 26 Feb 2003 11:30:45 +0000
Subject: #22263 [Opn->Asn]: socket_read() crashes on client close
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-34296@lists.php.net to get a copy of this message
 ID:               22263
 Updated by:       sniper@php.net
 Reported By:      caesar_iv4 at yahoo dot com
-Status:           Open
+Status:           Assigned
 Bug Type:         Sockets related
 Operating System: win 98 SE
 PHP Version:      4.3.2-dev
-Assigned To:      
+Assigned To:      wez


Previous Comments:
------------------------------------------------------------------------

[2003-02-18 23:00:24] sniper@php.net

correct PHP version..


------------------------------------------------------------------------

[2003-02-17 23:51:11] 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



------------------------------------------------------------------------


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



Thread (11 messages)

« previous php.bugs (#34296) next »