| I preface this by understanding that shared variables ((⎕SVO,etc) are considered an obsolete feature of GNU APL. I have my preferences set so that APserver is never started by default. But I've come across the following when using the default GNU APL behavior of enabling shared variable support. When starting the interpreter in SVN 2133 on macOS 26 and 27 with the shared variable support enabled, I'm greeted with the following: % apl --SV /usr/local/bin/APserver: listen socket has died unexpectedly /usr/local/bin/APserver: listen socket has died unexpectedly ::connect() to supposedly existing APserver failed: Socket is already connected ______ _ __ __ __ ___ ____ __ / ____// | / // / / / / | / __ \ / / / / __ / |/ // / / / / /| | / /_/ // / / /_/ // /| // /_/ / / ___ | / ____// /___ \____//_/ |_/ \____/ /_/ |_|/_/ /_____/ Welcome to GNU APL version 2.0 / SVN: 2133M Copyright © 2008-2026 Dr. Jürgen Sauermann Banner by FIGlet: www.figlet.org This program comes with ABSOLUTELY NO WARRANTY; for details run: apl --gpl. This program is free software, and you are welcome to redistribute it according to the GNU General Public License (GPL) version 3 or later. Svar_DB not connected in Svar_DB::is_registered_id() (APserver not running; shared variables unavailable) /usr/local/bin/APserver: listen socket has died unexpectedly /usr/local/bin/APserver: listen socket has died unexpectedly ) /usr/local/bin/APserver: listen socket has died unexpectedly o ff Goodbye. Session duration: 4.67723 seconds paulrockwell@Upstairs ~ % /usr/local/bin/APserver: listen socket has died unexpectedly k/usr/local/bin/APserver: listen socket has died unexpectedly killall/usr/local/bin/APserver: listen socket has died unexpectedly AP/usr/local/bin/APserver: listen socket has died unexpectedly serv/usr/local/bin/APserver: listen socket has died unexpectedly er The error messages from APserver continue after I stop the interpreter because the /usr/local/bin/APserver process is still running in the background. I have to locate and kill the process manually. Debugging the source code by executing APserver manually like GNU APL is doing behind the scenes revealed that the followng code in src/APs/APserver.cc function listen_sock() is returning failure: // read() cannot be used to probe a Winsock SOCKET on Windows -- // it is not a CRT file descriptor, only recv()/send()/ioctlsocket() // are valid on it -- so this always (falsely) reported the listen // socket, and then any freshly accepted connection, as dead on // every pass, immediately closing real connections again via // close_fd() below. A dead listen socket has no corrective action // here anyway (just the message); on Windows a dead per-connection // socket is still caught by the normal recv() return value once // real data-handling code runs on it later in the loop, the same // way most Windows socket servers detect a disconnect. if (0 != read(listen_sock, &dummy, 0)) cerr << prog << ": listen socket has died unexpectedly" << endl; The read() on listen_sock is returning error code 57 (ENOTCONN), in case that helps. I've included the configure output, config.log, and config.h so you can see how GNU APL has been configured. A side request: If you consider shared variable support to be obsolete, could the global GNU APL preferences be configured so that shared variable support is disabled by default? |
config_info.tar.gz
Description: GNU Zip compressed data
- Paul Rockwell |
