<?php
error_reporting(E_ALL);
 
$address = '127.0.0.1';
$port = 1337;
 
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
	echo "Не удалось создать сокет, причина: " . socket_strerror(socket_last_error()) . "\n";
	die;
}
 
if (socket_bind($sock, $address, $port) === false) {
	echo "Не удалось привязать сокет к адрресу, причина: " . socket_strerror(socket_last_error()) . "\n";
	die;
}
 
if (socket_listen($sock, 5) === false) {
	echo "Не удалось выполнить socket_listen(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
}
 
do {
	if (($msgsock = socket_accept($sock)) === false) {
		echo "Не удалось выполнить socket_accept(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
	}
 
	socketWrite($msgsock, "Welcome\r\n\r\n");
 
	do {
		if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
			echo "не удалось прочитать сокет, причина: " . socket_strerror(socket_last_error($msgsock));
			break 2;
		}

		$buf = trim($buf);
 
		if ($buf == "") {
			break;
		}
 
		if ($buf == "\r\n") {
			break;
		}
 
		socketWrite($msgsock, $buf);
	} while (true);
	socket_close($msgsock);
} while (true);
 
socket_close($sock);

function socketWrite($msgsock, $buffer) {
	$length = strlen($buffer);
 
	while ($bytesSent = socket_write($msgsock, $buffer)) {
		if ($bytesSent == $length) {
			echo "all bytes have been sent \n";
			break;
		} else {
			$buffer = substr($buffer, $bytesSent);
		}
	}
 
	if ($bytesSent === false) {
		echo "Не удалось записать данные в сокет, причина:" . socket_strerror(socket_last_error());
		socket_close($msgsock);
	}
}