Some more information ..
Earlier "emacsclient -c&" used to work. Now doing that auto-suspends that process and on doing fg, I get "broken pipe".
But "emacsclient -c" seems to be working (without that &). But then I need to block a new terminal for each new emacsclient invocation (with or without -c) ..
Also, I fixed a regression in one of the 3rd party Elisp packages that got updated in last month.
After that, instead of "broken pipe" error, I now see "*ERROR*: Assertion failed: (eq (match-end 0) (length string))"
That error is originating from servel.el:
=====
(condition-case err
(progn
(server-add-client proc)
;; Send our pid
(server-send-string proc (concat "-emacs-pid "
(number-to-string (emacs-pid)) "\n"))
(if (not (string-match "\n" string))
;; Save for later any partial line that remains.
(when (> (length string) 0)
(process-put proc 'previous-string string))
;; In earlier versions of server.el (where we used an `emacsserver'
;; process), there could be multiple lines. Nowadays this is not
;; supported any more.
(cl-assert (eq (match-end 0) (length string)))
=====
I get that assertion error if I do "emacsclient -c&". But if I do just "emacsclient -c", a new Emacsclient frame launches fine.