mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-18 18:40:22 +02:00
Support multiple concurrent instances of Emacs + GDS server
By: - Making the Unix socket name unique (for each Emacs instance), by appending Emacs's PID to it. - Changing the GDS server to listen on both Unix domain and TCP (and not to mind if the TCP bind fails, which will happen if another GDS instance has already bound to the TCP port number). - Adding this unique Unix socket name to the environment (as GDS_UNIX_SOCKET_NAME), so that Guile clients started from inside Emacs can pick it up. - Changing the GDS client code to look for GDS_UNIX_SOCKET_NAME in the environment, and to connect to the Unix socket with that name instead of over TCP. Guile clients started outside Emacs will not find GDS_UNIX_SOCKET_NAME and so will fall back to using TCP. This means they will connect to whichever Emacs + GDS server instance started first. * emacs/gds-server.el (gds-start-server): Take both Unix socket name and TCP port args, instead of just one (which could be either Unix or TCP), and pass these on to `run-server'. Remove unused optional bufname arg. * emacs/gds.el (gds-unix-socket-name, gds-tcp-port): New variables. (gds-socket-type-alist): Removed. (gds-run-debug-server): Pass gds-unix-socket-name and gds-tcp-port to gds-start-server. Add the Unix socket name to the environment. (gds-server-socket-type): Note now obsolete. * ice-9/gds-client.scm (connect-to-gds): Get Unix socket name from environment, and connect to this in preference to using TCP. * ice-9/gds-server.scm (run-server): Take both Unix socket name and TCP port args. Listen and accept connections on both.
This commit is contained in:
parent
a9408365f9
commit
72553cb0ce
4 changed files with 56 additions and 60 deletions
|
@ -44,25 +44,24 @@
|
|||
:group 'gds
|
||||
:type '(choice (const :tag "nil" nil) directory))
|
||||
|
||||
(defun gds-start-server (procname port-or-path protocol-handler &optional bufname)
|
||||
"Start a GDS server process called PROCNAME, listening on TCP port
|
||||
or Unix domain socket PORT-OR-PATH. PROTOCOL-HANDLER should be a
|
||||
function that accepts and processes one protocol form. Optional arg
|
||||
BUFNAME specifies the name of the buffer that is used for process
|
||||
output; if not specified the buffer name is the same as the process
|
||||
name."
|
||||
(with-current-buffer (get-buffer-create (or bufname procname))
|
||||
(defun gds-start-server (procname unix-socket-name tcp-port protocol-handler)
|
||||
"Start a GDS server process called PROCNAME, listening on Unix
|
||||
domain socket UNIX-SOCKET-NAME and TCP port number TCP-PORT.
|
||||
PROTOCOL-HANDLER should be a function that accepts and processes
|
||||
one protocol form."
|
||||
(with-current-buffer (get-buffer-create procname)
|
||||
(erase-buffer)
|
||||
(let* ((code (format "(begin
|
||||
%s
|
||||
(use-modules (ice-9 gds-server))
|
||||
(run-server %S))"
|
||||
(run-server %S %S))"
|
||||
(if gds-scheme-directory
|
||||
(concat "(set! %load-path (cons "
|
||||
(format "%S" gds-scheme-directory)
|
||||
" %load-path))")
|
||||
"")
|
||||
port-or-path))
|
||||
unix-socket-name
|
||||
tcp-port))
|
||||
(process-connection-type nil) ; use a pipe
|
||||
(proc (start-process procname
|
||||
(current-buffer)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue