Lisp:是否有回调通知open-socket的连接刚刚丢弃?

时间:2016-06-23 07:25:56

标签: sockets networking callback common-lisp disconnect

计算机代数系统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))

这样可以正常工作(除了内存条件仍然可能通过stdout发出信号,并且有时在内存不足的窗口不希望向应用程序发送“连接丢失”消息的最大值已连接to,但很容易解决这个问题。不幸的是,如果网络连接丢失,这会导致错误消息 - (因为错误输出绑定到网络)会导致错误消息导致...

在导致无限循环之前,是否有任何方法可以捕获连接丢失?

很抱歉问这个看似基本的问题。但我现在几个月都没有找到解决方案,我认为我需要专家的帮助。

1 个答案:

答案 0 :(得分:1)

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

通常会发出错误信号。

因此,您需要提供一个条件处理程序,该处理程序在出现此类问题时处于活动状态。您需要了解Common Lisp条件系统以及如何处理条件。它如何与流,套接字,网络连接一起使用是非常特定于实现的。