Смотрите в сторону функций socket_listen, socket_accept. Спокойно работает на php под управлением апача, к слову. Только не на 80 порт сервер ваш вешайте.
В общем случае дело выглядит так:
set_time_limit(0);
ini_set('max_execution_time', 0);
error_reporting(0);
$clients = array();
$server = /* создание сокета: create, bind, listen */;
$exit = false;
while (true) {
if ($exit) break; // при какой-то команде полезно этот флажок менять, иначе довольно трудно вырубить. полезно еще делать if is_file('close.txt') break; для "аварийного" выключения
if ($client = @socket_accept($server)) {
/*
новый клиент.
читаем входные данные,
шлем ответ,
добавляем при надобности клиента в список
*/
}
foreach ($clients as $client) {
/* читаем команду, отвечаем */
}
sleep(1); // дабы не перегружать сервер
}
foreach ($clients as $client)
@socket_close($client);
@socket_close($server);