Subject: bug#23808: Emacs 25 open-network-stream, make-network-process

From: Paul Eggert <[email-masked]>
Date: Mon, 20 Jun 2016 12:08:35 +0200

[I'm passing this along from a correspondent who wishes to remain 
anonymous.]

Hello, the recent changes to make-network-process (between jan and the
end of april) may have introduced some problems, (I think they may
still be current, apologies otherwise)

I. misreporting the status of a failed network connection: when
open-network-stream is interrupted after `SYN_SENT': For example:

1. $ iptables -A OUTPUT -p tcp --dport 6697 -j DROP -d 127.0.0.1
2. $ nc -v localhost 6697 #;hangs
3. (open-network-stream "test-proc" "test-buffer" "127.0.0.1" 6697) ; ^G
4. (list-processes)
5. (process-status "test-proc") ; open
6. (process-send-string "test-proc" "foo") ; error fd closed
7. (delete-process "test-proc")

For testing on linux, step 1 makes connections to localhost:6697 hang,
step 2 verifies this using `netcat'. interrupt step 3 with a ^G, step
4 lists a spurious "test-proc" which should not exist, and step 5
reports its state as 'open, while step 6 confirms the fd is closed.

II. spurious "server-client-test" processes with
1. emacs --daemon -Q
2. emacsclient -t
3. list-processes

AFAICT from server.el these processes should not exist. Sometimes I've
seen half a dozen of these "server-client-test" processes when the
daemon was slow to start up with multiple clients connecting.