Sockets Lisp:是否有一个回调通知来自开放套接字的连接刚刚断开?

Sockets Lisp:是否有一个回调通知来自开放套接字的连接刚刚断开?,sockets,networking,callback,common-lisp,disconnect,Sockets,Networking,Callback,Common Lisp,Disconnect,计算机代数系统Maxima使用(开放式插座)连接到其前端(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

计算机代数系统Maxima使用
(开放式插座)
连接到其前端(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))
这可以正常工作(除了内存不足的情况仍然可能通过标准输出发出信号,并且windows有时在内存不足时不希望发送“连接丢失”消息到应用程序maxima的消息已连接到,但很容易解决此问题。不幸的是,如果网络连接丢失,则会导致错误消息-这(因为错误输出绑定到网络)会导致错误消息,导致

有没有办法在导致无休止的循环之前捕获连接丢失


很抱歉问这么一个看似基本的问题。但我已经好几个月没有找到解决方案了,我想我需要专家的帮助。

常见的Lisp实现如何处理网络错误是特定于实现的

通常会发出错误情况的信号。


因此,您需要提供一个条件处理程序,该处理程序在出现此类问题时处于活动状态。您需要了解常见的Lisp条件系统以及如何处理条件。如何处理流、套接字和网络连接是非常具体的实现方式。

对于任何感兴趣的人,代码如下:。我不认为有e就是这样一个回调。如果我正确理解了您的问题,我会尝试将套接字封装在一个自定义流对象中,该对象将处理连接错误并提供可能的回退流。抛开Lisp实现,您需要了解TCP中没有此类事件。除非您实际参与网络操作操作:读、写或多路选择,TCP无法告诉Lisp连接已断开。