stream_socket_serverを弄ってみた

今年もよろしくお願いします。

さて、PHPでstream_socket_serverという関数があるのを知ったので、
PHPでWEBサーバ的な何か作れるじゃん?」と思い、少しだけ弄ってみました。

サンプルコード
recv.php

<?php
function run()
{
     $server = stream_socket_server("tcp://ipaddr:free_port", $errno, $errstr );
     while(true){
         $socket = stream_socket_accept( $server );
         echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
         fclose($socket);
     }
     fclose($server);
}
run();
?>

実行確認
$ ps f

19663 pts/3    Ss     0:00 -bash
23049 pts/3    S+     0:00  \_ /usr/bin/php recv.php

簡単に立ち上がりました。

telnetから
$ telnet ipaddr free_port

GET /index.html

を入力。
すると、recv.php側で

Data: 'GET /index.html
'

をいけそうな感じです。

ブラウザからも http://ipaddr:free_port/ で接続。
recv.php側で

Data: 'GET / HTTP/1.1
Host:ipaddr:free_port
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive

'

リクエストヘッダが取得出来ました。

とりあえず、弄ってみるのはここまでで。