From 22ae5e509de0e819111a29487ac66a7ca431bfde Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Wed, 23 Nov 2016 12:56:27 +0100 Subject: [PATCH] Add support for running as TCP server --- README.md | 10 ++++++++++ bin/php-language-server.php | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/README.md b/README.md index dae264d..fc107b2 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,16 @@ Example: php bin/php-language-server.php --tcp=127.0.0.1:12345 +#### `--tcp-server=host:port` (optional) +Causes the server to use a tcp connection for communicating with the language client instead of using STDIN/STDOUT. +The server will listen on the given address for a connection. +It will only accept one connection and the connection cannot be reestablished once closed, spawn a new process instead. +Strongly recommended on Windows because of blocking STDIO. + +Example: + + php bin/php-language-server.php --tcp-server=127.0.0.1:12345 + #### `--memory-limit=integer` (optional) Sets memory limit for language server. Equivalent to [memory-limit](http://php.net/manual/en/ini.core.php#ini.memory-limit) php.ini directive. diff --git a/bin/php-language-server.php b/bin/php-language-server.php index cad4215..fe7f79f 100644 --- a/bin/php-language-server.php +++ b/bin/php-language-server.php @@ -39,6 +39,16 @@ if (!empty($options['tcp'])) { exit(1); } $inputStream = $outputStream = $socket; +} else if (!empty($options['tcp-server'])) { + $address = $options['tcp-server']; + $tcpServer = stream_socket_server('tcp://' . $address, $errno, $errstr); + if ($socket === false) { + fwrite(STDERR, "Could not listen on $address. Error $errno\n"); + fwrite(STDERR, "$errstr\n"); + exit(1); + } + $socket = stream_socket_accept($tcpServer); + $inputStream = $outputStream = $socket; } else { $inputStream = STDIN; $outputStream = STDOUT;