Ik ben nieuw met php, dus misschien is het wel heel logisch, maar ik wil het toch even navragen. Als ik php sockets gebruik gaat alles vrij vlug, maar als het lezen van een buffer klaar is duurt het nog heel lang voordat de socket gesloten wordt. Voorbeeld op http://84.31.72.237

Code die ik gebruik:

<?php

echo "begin!<br>";
flush();
$address = gethostbyname('www.xwis.net');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
flush();
echo "verbinden naar $address" . ":" . "$service_port...<br>";

if (socket_connect($socket, $address, 80) < 0) {
   echo "socket_connect() failed.\nReason: ($result) ";
}
else {
   echo "socket gemaakt";
}
flush();

$in = "GET /xcl/?pid=51627 HTTP/1.1\r\n";
$in .= "Host: xwis.net\r\n\r\n";
$out = '';

echo "Sending HTTP GET request:" . $in . "...<br>";
socket_write($socket, $in);
flush();

echo "antwoord lezen:\n\n<xmp>";
flush();
while ($out = socket_read($socket,1024)) {
   echo $out;
   flush();
}
echo "</xmp> klaar, socket sluiten.\n\n";

socket_close($socket);
exit();
?>


Zodra alle data al is gelezen duurt het dus nog een tijdje voordat "klaar, socket sluiten. " op het scherm verschijnt. Is daar een verklaring voor? Het werkt wel... alleen zeer langzaam helaas.
Ohja, open de site in IE omdat firefox pas de buffer uitleest zodra het de xmp sluittag heeft gevonden. Die komt dus juist te laat ;P
zzattack schreef op 19.06.2006 16:01
Ohja, open de site in IE omdat firefox pas de buffer uitleest zodra het de xmp sluittag heeft gevonden. Die komt dus juist te laat ;P
In Firefox is je socket anders sneller dan in IE ;-)
uhm ik dacht dat ik de noob was ;P
bump again
Door hem even door een script dat ik onlangs had gemaakt te halen krijg ik deze 2 grafiekjes. De zwarte lijn is de tijd die hij over die regel heeft gedaan, in totaal (alle rondjes bij elkaar opgeteld) en de rode is is het aantal maal dat hij die regels heeft uitgevoerd:

Hierbij is de regel met de top, regel 55, de }, het einde van de while-lus.

Ik heb je script even herschreven en het uitlezen binnen de lus gezet, in plaats van in de voorwaarde:

Inderdaad, regel 51 is de socket_read().

Dus ik dacht dat het aan socket_read lag, dat die gewoon heel sloom was. Echter, waneer ik hem vergelijk met een ander script van mijzelf, dat hetzelfde doet alleen dan via fsockopen viel me op dat ik 1 header meer meestuur, namelijk 'Connection: close'.
En stop ik die header ook in jouw script, doet hij het gewoon instant, zoals het hoort. socket_read() bleef dus tijd innemen, wachten totdat er nog wat kwam. De connection was immer niet dicht.

Oplossing:
<?
$in .= "Connection: Close\r\n";
?>

Reageren