Newsgroup: it.comp.www.php
Titolo: Aiuto! Problema con funzione fread su socket

Sto cercando di utilizzare una classe che fa da wrapper per connessioni TCP usando il protocollo SOCKS 5 (non scritta da me, trovata su 
phpclasses.org
), ma purtroppo mi da sempre errore.
Il codice è il seguente, classe + codice d'esempio per utilizzare i suoi metodi
<?
/*
     methods:
         socks5($ip, $port) - constructor, $ip and $port - ip and port of anonymous socks5 proxy
         connect($host, $port) - make a connection to $host:$port thru socks5 proxy. $host may be hostname or ip address
         send($buffer, $length = 0) - send $buffer of $length bytes to connection. if $length not set - $length=strlen($buffer)
*/
     class socks5 {
         var $socket;
         var $connected;
         var $debug;
         function socks5($ip, $port) {
             if ($this->socket = pfsockopen($ip, (int)$port, $errno, $errstr)) {
                 $buf["send"] = pack("C3", 0x05, 0x01, 0x00);
                 fwrite($this->socket, $buf["send"]);
                 $buf["recv"] = "";
                 while ($buffer = fread($this->socket, 1024)) {
                     $buf["recv"] .= $buffer;
                 }
                 $responce = unpack("Cversion/Cmethod", $buf["recv"]);
                 if ($responce["version"] == 0x05 and $responce["method"] == 0x00) {
                     return true;
                 }
                 fclose($this->socket);
             }
             return false;
         }
         function connect($host, $port) {
             if ($this->socket) {
                 if (ip2long($host) == -1) {
                     $buf["send"] = pack("C5", 0x05, 0x01, 0x00, 0x03, strlen($host)).$host.pack("n", $port);
                 } else {
                     $buf["send"] = pack("C4Nn", 0x05, 0x01, 0x00, 0x01, ip2long(gethostbyname($host)), $port);
                 }
                 fwrite($this->socket, $buf["send"]);
                 $buf["recv"] = "";
                 while ($buffer = fread($this->socket, 1024)) {
                     $buf["recv"] .= $buffer;
                 }
                 $responce = unpack("Cversion/Cresult/Creg/Ctype/Lip/Sport", $buf["recv"]);
                 if ($responce["version"] == 0x05 and $responce["result"] == 0x00) {
                     $this->connected = true;
                     return true;
                 }
             }
             $this->connected = false;
             return false;
         }
         function send($buffer, $length = 0) {
             if ($length = 0) {
                 $length = strlen($buffer);
             }
             if ($this->socket and $this->connected) {
                 fwrite($this->socket, $buffer, $length);
                 while ($recieved = fread($this->socket, 1024)) {
                     $output .= $recieved;
                 }
                 return $output;
             }
             return false;
         }
     }
     $server_name = "
www.google.com
";
     $server_port = 80;
     $socks = new socks5("127.0.0.1", 3128)
     if ($socks->connect($server_name, $server_port)) {
         $headers[] = "GET / HTTP/1.1";
         $headers[] = "Host: $server_name:$server_port";
         $packet = join("\r\n", $headers)."\r\n\r\n";
         $responce = $socks->send($packet);
         echo $responce;
     }
     exit;
?>
Facendo girare il codice ricevo sempre questo warning
Warning: unpack(): Type C: not enough input, need 1, have 0
alla linea di codice
$responce = unpack("Cversion/Cresult/Creg/Ctype/Lip/Sport", $buf["recv"]);
della funzione connect
dovuto al fatto che nel ciclo
while ($buffer = fread($this->socket, 1024)) {
	$buf["recv"] .= $buffer;
}
non viene letto niente dal socket e $buf["recv"] risulta vuota quando viene passato alla funziona unpack.
Qualcuno riesce a spiegarmi perchè e come posso risolvere?
Lo stesso codice che è presente nella function socks5 funziona perfettamente.
Ho provato a cambiare questa parte di codice
     $server_name = "
www.google.com
";
     $server_port = 80;
     $socks = new socks5("127.0.0.1", 3128)
ma non dipende dal socks server utilizzato ne dal sito a cui voglio connettermi.
Help!!


qualcuno mi caga?

 qualcuno mi caga?
Domandare e' lecito, rispondere e' cortesia, se vuoi una consulenza
paga qualcuno.
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

 
almento te mi hai risposto....

 almento te mi hai risposto....
ma ti serviva aiuto o ti senti solo..
non te la prendere sto' solo scherzando..
-- 
www.iuz-lab.info

 qualcuno mi caga?
Beh, un po tanto ti codice.
Se riuscissi a ridurre al minimo il problema qualcuno potrebbe anche degnarsi
a leggere il codice.
JM2C...