Forum dedicato alla programmazione.
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
da ZeroUno » ven mar 30, 2012 10:38
Ecco un piccolo server web scritto in php (assolutamente didattico; giusto per studiare i socket).
- Codice: Seleziona tutto
<?php
$documentroot="/var/www/htdocs";
$port=8080;
if(!$socket = @socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) die();
if(!@socket_bind($socket,'127.0.0.1',$port)) die();
if(!@socket_listen($socket))die();
$client = socket_accept($socket);
$get=null;
$i=0;
$headers=array();
while(true){
if(($stringa=@socket_read($client,1000000,PHP_NORMAL_READ))===FALSE)die();
if($stringa==="\n")continue;
$stringa=trim($stringa,"\n\r");
if(is_null($get)){
$get=substr($stringa,0,3);
if($get!="GET"){
socket_write($client,"501 Method Not Implemented\n");
die();
}else{
$stringa=explode(" ",$stringa);
$get=$stringa[1];
}
}else{
if($stringa === "") break;
$headers[]=$stringa;
}
}
$file="$documentroot/$get";
if(is_dir($file))$file.="/index.html";
if(is_file($file)){
socket_write($client,file_get_contents($file));
}else{
socket_write($client,"404 Not Found\n");
}
socket_shutdown($client);
socket_close($client);
socket_shutdown($socket);
socket_close($socket);
?>
Che ne pensate?
edit:
limiti:
accetta una singola connessione. Alla connessione non effettua il fork del processo ma soddisfa la richiesta e poi muore

accetta solo metodo GET (no HEAD e POST)
-

ZeroUno
- Staff

-
- Messaggi: 3769
- Iscritto il: ven giu 02, 2006 14:52
- Località: Roma / Castelli
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: slack-current
- Distribuzione: 01000000-current
-
Torna a Programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti