39.1 TCP Emacs server
An Emacs server usually listens to connections on a local Unix
domain socket. Some operating systems, such as MS-Windows, do not
support local sockets; in that case, the server uses TCP sockets
instead. In some cases it is useful to have the server listen on a
TCP socket even if local sockets are supported, e.g., if you need to
contact the Emacs server from a remote machine. You can set
server-use-tcp
to non- nil
to have Emacs listen on a TCP
socket instead of a local socket. This is the default if your OS does
not support local sockets.
If the Emacs server is set to use TCP, it will by default listen on
a random port on the localhost interface. This can be changed to
another interface and/or a fixed port using the variables
server-host
and server-port
.
A TCP socket is not subject to file system permissions. To retain
some control over which users can talk to an Emacs server over TCP
sockets, the emacsclient
program must send an authorization
key to the server. This key is normally randomly generated by the
Emacs server. This is the recommended mode of operation.
If needed, you can set the authorization key to a static value by
setting the server-auth-key
variable. The key must consist of
64 ASCII printable characters except for space (this means characters
from ‘ !
’ to ‘ ~
’, or from decimal code 33 to 126). You can
use M-x server-generate-key
to get a random key.
When you start a TCP Emacs server, Emacs creates a server file
containing the TCP information to be used by emacsclient
to
connect to the server. The variable server-auth-dir
specifies
the default directory containing the server file; by default, this is
~/.emacs.d/server/
. In the absence of a local socket with file
permissions, the permissions of this directory determine which users
can have their emacsclient
processes talk to the Emacs
server. If server-name
is an absolute file name, the server
file is created where specified by that file name.
To tell emacsclient
to connect to the server over TCP with
a specific server file, use the ‘ -f
’ or ‘ --server-file
’
option, or set the EMACS_SERVER_FILE
environment variable
(see emacsclient
Options). If server-auth-dir
is set to a
non-standard value, or if server-name
is set to an absolute
file name, emacsclient
needs an absolute file name to the
server file, as the default server-auth-dir
is hard-coded in
emacsclient
to be used as the directory for resolving
relative filenames.