Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
;; This file:
;;   http://angg.twu.net/elisp/echo-server.el.html
;;   http://angg.twu.net/elisp/echo-server.el
;;           (find-angg "elisp/echo-server.el")
;; Author: Eduardo Ochs <eduardoochs@gmail.com>
;;
;; (defun e () (interactive) (find-angg "elisp/echo-server.el"))
;; https://www.emacswiki.org/emacs/EmacsEchoServer

(defvar echo-server-port 10000
  "port of the echo server")

(defvar echo-server-clients '() 
  "alist where KEY is a client process and VALUE is the string")

;; (find-elnode "Process Information")
;; (find-efunction 'list-processes)
;; (find-efunction 'list-processes--refresh)

(list-processes)
(process-list)
(process-contact (car (process-list)))

(find-eppp
 (cl-loop
  for p in (process-list)
  collect
  (list p
	:id       (process-id p)
	:name     (process-name p)
	:type     (process-type p)
	:status   (process-status p)
	:sentinel (process-sentinel p)
	:filter   (process-filter p)
	:buffer   (process-buffer p)
	)))

(defun echo-server-start nil
    "starts an emacs echo server"
    (interactive)
    (unless (process-status "echo-server")
      (make-network-process
       :name     "echo-server"
       :buffer   "*echo-server*"
       :family   'ipv4
       :service   echo-server-port
       :sentinel 'echo-server-sentinel
       :filter   'echo-server-filter
       :server   't)
      (setq echo-server-clients '()))) 

(defun echo-server-stop nil
  "stop an emacs echo server"
  (interactive)
  (while  echo-server-clients
    (delete-process (car (car echo-server-clients)))
    (setq echo-server-clients (cdr echo-server-clients)))
  (delete-process "echo-server"))

(defun echo-server-filter (proc string)   
  (let ((pending (assoc proc echo-server-clients))
        message
        index)
    ;;create entry if required
    (unless pending
      (setq echo-server-clients (cons (cons proc "") echo-server-clients))
      (setq pending  (assoc proc echo-server-clients)))
    (setq message (concat (cdr pending) string))
    (while (setq index (string-match "\n" message))
      (setq index (1+ index))
      (process-send-string proc (substring message 0 index))
      (echo-server-log  (substring message 0 index) proc)
      (setq message (substring message index)))
    (setcdr pending message)))
  
(defun echo-server-sentinel (proc msg)
  (when (string= msg "connection broken by remote peer\n")
    (setq echo-server-clients (assq-delete-all proc echo-server-clients))
    (echo-server-log (format "client %s has quit" proc))))

;;from server.el
(defun echo-server-log (string &optional client)
  "If a *echo-server* buffer exists, write STRING to it for logging purposes."
  (if (get-buffer "*echo-server*")
      (with-current-buffer "*echo-server*"
        (goto-char (point-max))
        (insert (current-time-string)
                (if client (format " %s:" client) " ")
                string)
        (or (bolp) (newline)))))



;; Local Variables:
;; coding:  utf-8-unix
;; End: