From 90d95b000c37f7e85096716db96c4a940436f387 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Thu, 5 Jul 2018 19:37:28 -0400 Subject: [PATCH] Explicitly reject :server and :nowait (Bug#31903) * src/process.c (Fmake_network_process): Explicitly check for and signal an error when passed both :server and :nowait non-nil. In Emacs 25, :nowait would be ignored in this case, but as of Emacs 26.1 this gives an error, albeit an unclear one. Also remove obsolete comment regarding configurations lacking non-blocking mode, the corresponding code was removed in 2012-11-17 "Assume POSIX 1003.1-1988 or later for fcntl.h." --- src/process.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/process.c b/src/process.c index 7f6ea1261e7..4d7a735652c 100644 --- a/src/process.c +++ b/src/process.c @@ -3890,12 +3890,15 @@ usage: (make-network-process &rest ARGS) */) filter = Fplist_get (contact, QCfilter); sentinel = Fplist_get (contact, QCsentinel); use_external_socket_p = Fplist_get (contact, QCuse_external_socket); + Lisp_Object server = Fplist_get (contact, QCserver); + bool nowait = !NILP (Fplist_get (contact, QCnowait)); + if (!NILP (server) && nowait) + error ("`:server' is incompatible with `:nowait'"); CHECK_STRING (name); /* :local ADDRESS or :remote ADDRESS */ - tem = Fplist_get (contact, QCserver); - if (NILP (tem)) + if (!NILP (server)) address = Fplist_get (contact, QCremote); else address = Fplist_get (contact, QClocal); @@ -4009,7 +4012,7 @@ usage: (make-network-process &rest ARGS) */) } #ifdef HAVE_GETADDRINFO_A - if (!NILP (host) && !NILP (Fplist_get (contact, QCnowait))) + if (!NILP (host) && nowait) { ptrdiff_t hostlen = SBYTES (host); struct req @@ -4154,20 +4157,13 @@ usage: (make-network-process &rest ARGS) */) set_network_socket_coding_system (proc, host, service, name); - /* :server BOOL */ - tem = Fplist_get (contact, QCserver); - if (!NILP (tem)) - { - /* Don't support network sockets when non-blocking mode is - not available, since a blocked Emacs is not useful. */ - p->is_server = true; - if (TYPE_RANGED_INTEGERP (int, tem)) - p->backlog = XINT (tem); - } + /* :server QLEN */ + p->is_server = !NILP (server); + if (TYPE_RANGED_INTEGERP (int, server)) + p->backlog = XINT (server); /* :nowait BOOL */ - if (!p->is_server && socktype != SOCK_DGRAM - && !NILP (Fplist_get (contact, QCnowait))) + if (!p->is_server && socktype != SOCK_DGRAM && nowait) p->is_non_blocking_client = true; bool postpone_connection = false; -- 2.39.2