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.
gds-server-port-or-path instead of hardcoded 8333.
(gds-server-port-or-path): New.
* gds-server.el (gds-start-server): Change port arg to
port-or-path, to support Unix domain sockets.
* gds-client.scm (connect-to-gds): Try to connect by Unix domain
socket if TCP connection fails.
* gds-server.scm (run-server): Update to support listening on a
Unix domain socket.