Newsgroup: it.comp.www.php
Titolo: i socket in php

Ho fatto copia ed incolla dell'esempio seguente:
<?php
// Set time limit to indefinite execution
set_time_limit (0);
// Set the ip and port we will listen on
$address = '127.0.0.1';
$port = 9000;
// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $address, $port) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);
/* Accept incoming requests and handle them as child processes */
$client = socket_accept($sock);
// Read the input from the client &#8211; 1024 bytes
$input = socket_read($client, 1024);
// Strip all white spaces from input
$output = ereg_replace("[ \t\n\r]","",$input).chr(0);
// Display output back to client
socket_write($client, $output);
// Close the client (child) socket
socket_close($client);
// Close the master sockets
socket_close($sock);
?>
Ma quando tento di eseguirlo ottengo:
    Fatal error: Call to undefined function:  socket_create()
L'help dice che le funzioni relative ai socket sono disponibili se php è
stato configurato in fase di compilazione con "--enable-sockets" , io sto'
lavorando in windows e php me lo sono scaricato già compilato da 
php.net
;
c'è modo di modificare php in modo che includa queste funzioni senza dover
ricompilarlo?
In alternativa c'è qualche altro modo per gestire l'accesso a socket?
Grazie dell'aiuto, ciao!
    Andrea

     Andrea
di nulla!
raenkrus

 riavvia il web server e voilą.
Lo avevo gią fatto ma ancora non funziona...
Php oramai lo conosco abbastanza bene (almeno per quel che riguarda le
gestioni delle estensioni et simili) perņ non sņ niente (o quasi) di quel
che riguarda i socket; il sospetto č: non č che un socket prima di poter
essere utilizzato debba in qualche modo essere creato o inizializzato a
livello di sistema?

 
Ma la dll c'è sul tuo sistema?
http://kromann.info/php4.php
-- 
Spoken: How much is that gorilla in the window?
Take our advice, At any price, A gorilla like Magilla is mighty nice.
Gorilla, Magilla Gorilla for sale

 
http://kromann.info/php4.php
Grazie del link... Non lo conoscevo, molto interessante. (Non rimarrň piů
senza estensioni!!!)  :-)

Trovato!
L'errore non mi sembra infine così chiaro (php finora mi aveva abituato
bene!!!)
Comunque prova e riprova ho capito qual'era il problema: la porta 9000 era
già utilizzata! E' bastato infatti cambiare il numero della porta (8000) e
l'esempio ha cominciato a funzionare... (finchè non tento di connettermi!!!)
Infatti non appena lancio l'esecuzione di questo secondo script di esempio
(allegato alla fine del messaggio) il primo script termina restituendo
questo errore:
    PHP Warning:  socket_read() unable to read from socket [0]: Operazione
terminata con successo.
Qualcuno ha qualche suggerimento?
Grazie dell'aiuto.
Ciao
<?php
error_reporting (E_ALL);
echo "<h2>Connessione TCP/IP </h2>\n";
/* Ottiene la porta per il servizio WWW. */
#$service_port = getservbyname ('www', 'tcp');
$service_port = 8000;
/* Ottiene l'indirizzo IP per il server cercato. */
$address = '192.168.0.19';
/* Crea un socket TCP/IP. */
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket_create() fallito: motivo: " . socket_strerror ($socket) . "\n";
} else {
echo "OK.\n";
}
echo "Tentativo di connessione a '$address' sulla porta '$service_port'...";
$result = socket_connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket_connect() fallito.\nMotivo: ($result) " .
socket_strerror($result) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.0\r\n\r\n";
$out = '';
echo "Invio HTTP HEAD...";
socket_write ($socket, $in, strlen ($in));
echo "OK.\n";
echo "Lettura della risposta:\n\n";
while ($out = socket_read ($socket, 2048)) {
echo $out;
}
echo "Chiusura del socket...";
socket_close ($socket);
echo "OK.\n\n";
?>