2009-06-11 9 views
0
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
socket_bind($socket, $ip_server , $port); 

socket_sendto($socket, $ascii_egyben_kimenet, strlen($ascii_egyben_kimenet), 0, $ip_plc , $port); 
$valasz_kimenet=socket_read($socket, 256); 

Da der socket_read warten der Server auf eine Antwort wartet ... Wie kann ich die max Zeit warten definieren können?PHP Sockel definieren die maximale Zeit

Antwort

2

Das machen Sie mit der Funktion socket_set_timeout(). Beispiel für eine 1/2 Sekunde timeout:

socket_set_timeout($socket, 0, 500); 

Sie überprüfen können, ob jemand ohne Blockierung durch setting the socket to non-blocking mode zu verbinden versucht:

socket_set_blocking($socket, 0); 
+0

socket_set_timeout ($ socket, 3, 500); Wohin? Ich habe versucht, aber nicht funktioniert. –

+0

Sie sollten den Zeitüberschreitungswert festlegen, bevor Sie socket_read() aufrufen. Wenn es wirklich nicht funktioniert, sollten Sie error_reporting (E_ALL) aktivieren – soulmerge

0

Oder

socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>10, 'usec'=>0)); 
+0

es funktioniert Danke! –

0

Ich weiß nicht, Wenn das selbe Problem mit socket_set_timeout() auftaucht, aber mit ernsthafter Benutzung von stream_set_timeout(), stellte ich fest, dass PHP das Zeitlimit auf das Doppelte der von mir angegebenen einstellte. Also, wenn ich es 60 Sekunden gesagt habe, war es genau zwei Minuten, bevor ich aufhörte zu hören. Ich musste tatsächlich die Anzahl der gewünschten Sekunden nehmen und mit 500000 multiplizieren, um den in stream_set_timeout() zu verwendenden Wert zu erhalten.