【发布时间】:2016-06-23 07:25:55
【问题描述】:
计算机代数系统 Maxima 使用(open-socket) 连接到其前端(wxMaxima 或 xMaxima)。之后,它会确保所有输出都实际传递到前端:
(setq *standard-input* sock)
(setq *standard-output* sock)
(setq *error-output* sock)
(setq *terminal-io* sock)
(setq *trace-output* sock)
(format t "pid=~a~%" (getpid))
(force-output sock)
(setq *debug-io* sock))
这很好用(除了内存不足的情况仍然可能通过标准输出发出信号,并且有时内存不足的窗口不想发送“连接丢失”消息到应用程序最大值已连接到,但很容易解决这个问题。不幸的是,如果网络连接丢失,这会导致错误消息 - (因为错误输出绑定到网络)会导致错误消息导致...
有没有办法在连接丢失导致无限循环之前捕获连接丢失?
很抱歉提出这样一个看似基本的问题。但是几个月来我都没有找到解决方案,我想我需要专家的帮助。
【问题讨论】:
-
任何有兴趣的人,代码在这里:github.com/andrejv/maxima/blob/…。我不认为有这样的回调。如果我正确理解了您的问题,我会尝试将套接字包装在自定义流对象中,该对象将处理连接错误并可能提供后备流。
-
抛开 Lisp 实现不谈,你需要了解在 TCP 中没有这样的事件。除非您实际参与网络操作:读取、写入或多路选择,否则 TCP 无法告诉 Lisp 连接已断开。
标签: sockets networking callback common-lisp disconnect