я делал как-то так для создания сокета:
ob_implicit_flush();
if( ($sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP )) === false )
{
self::fault(self::ERROR_SCR, $sock, __LINE__);
exit();
}
socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);
self::log("сервер: сокет создан\n");
if( socket_bind( $sock, $_SERVER['HTTP_HOST'], self::$port ) === false )
{
self::fault(self::ERROR_SBND, $sock, __LINE__);
exit();
}
self::log("сервер: сокет привязан\n");
if( socket_listen( $sock, 2 ) === false )
{
self::fault(self::ERROR_SLI, $sock, __LINE__);
exit();
}
self::log("сервер: сокет слушается\n");
session_write_close();
socket_set_nonblock($sock);
а для подключения:
private
function getAcceptMsg($input)
{
preg_match("/Sec-WebSocket-Key: (.*);/uU", $input, $temp );
$key_acp = $temp[ 1 ];
$key_acp = base64_encode( sha1( $key_acp . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true ) );
$msg = "HTTP/1.1 101 Swithing Protocols\r\n";
$msg .= "Upgrade: websocket\r\n";
$msg .= "Connection: Upgrade\r\n";
$msg .= "Sec-Websocket-Accept: {$key_acp}\r\n\r\n";
return $msg;
}
//отвечаем браузеру
$msg = $this->getAcceptMsg($input);
socket_write( $msgsock, $msg, strlen( $msg ) );
socket_set_nonblock($msgsock);