$buffer = "";
$termination = 0;
do {
$data = @socket_read($client, 8192, PHP_NORMAL_READ);
$buffer .= $data;
if ($data == "\r\n") {
$termination++;
}
} while($termination < 2 || $data !== false);
die($buffer);
$data == "\r\n"
делает не то, что надо. Это сравнение вернёт истину только один раз, когда придёт второй CRLF, потому что первый был не сам по себе, а завершал последнюю строчку заголовка. Вообще, типичный HTTP-запрос выглядит примерно так (только полей обычно побольше):GET / HTTP/1.1\r\n
Host: habrahabr.ru\r\n
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n
Connection: keep-alive\r\n
Referer: http://habrahabr.ru/\r\n
\r\n