Archief - PHP: na x sec loop stoppen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Disa

Legacy Member
Ik zit met een probleempje. Ik maak een connectie naar een UT server en dat gaat perfect, maar als dat ip:port geen ut server draait geraakt het in een oneindige loop vast te zitten. ik heb geprobeerd via time() een limit te zenden maar het lukt niet:

PHP:
function UTquery($ip,$port) {
	//Open UDP socket to server
	$sock = fsockopen("udp://" . $ip, $port, $errno, $errstr,4);
	//Check if we have a socket open, if not, display error message
	if (!$sock) {
		echo "$errstr ($errno)<br>\n";
		$chunks['error'] == FALSE;
		die();
	}
	else {
		fwrite($sock,"\\status\\\player_property\Health\\\game_property\ElapsedTime\\\game_property\RemainingTime\\");
		$gotfinal = False;
		$data = "";
		$starttime = time();
		//Loop until final packet has been received.
		while(!($gotfinal == true || feof($sock))) {
			if(($buf = fgetc($sock)) == FALSE) {
				usleep(100); 
			}
			//Add to databuffer
			$data .= $buf;
			if (strpos($data,"final\\") != false) {
				$gotfinal = true;
			}

			$end = time() - $starttime;
			
			if ($end > 3) {
				break;
			}
		}
		//Close socket
		fclose ($sock);
		//Split chunks by \
		$chunks = split('[\]', $data);
		$return = array_merge($chunks,$test);
		return $return;
	}
}
?>

thx dis

killgore

Legacy Member
dit is een andere manier (logischer imho):
PHP:
function UTquery($ip,$port) {
	//Open UDP socket to server
	$sock = fsockopen("udp://" . $ip, $port, $errno, $errstr,4);
	//Check if we have a socket open, if not, display error message
	if (!$sock) {
		echo "$errstr ($errno)<br>\n";
		$chunks['error'] == FALSE;
		die();
	}
	else {
		fwrite($sock,"\\status\\\player_property\Health\\\game_property\ElapsedTime\\\game_property\RemainingTime\\");
		$gotfinal = False;
		$data = "";
		$time= time();
                $end = $time+5;
		//Loop until final packet has been received.
		while(!($gotfinal == true || feof($sock)) && $time<$end) {
			if(($buf = fgetc($sock)) == FALSE) {
				usleep(100); 
			}
			//Add to databuffer
			$data .= $buf;
			if (strpos($data,"final\\") != false) {
				$gotfinal = true;
			}

			$time=time();
		}
		//Close socket
		fclose ($sock);
		//Split chunks by \
		$chunks = split('[\]', $data);
		$return = array_merge($chunks,$test);
		return $return;
	}
}
?>

Disa

Legacy Member
hmmz ik ben eerlijk gezegd niet zeker of het wel aan die loop ligt. Zou het ook kunnen dat hij maar blijft proberen een connectie te maken ?

Dis

dJeez

Legacy Member
RTFM

UDP sockets will sometimes appear to have opened without an error, even if the remote host is unreachable. The error will only become apparent when you read or write data to/from the socket. The reason for this is because UDP is a "connectionless" protocol, which means that the operating system does not try to establish a link for the socket until it actually needs to send or receive data.

stream_set_timeout kan handig zijn, net zoals een non-blocking socket.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan