Проблема здесь была связана с make-network-process
При вызове этой функции с помощью: nowait установлено в nil, чтобы сделать синхронный вызов / блокировка функции часового никогда не вызывается с состоянием «открыто».К сожалению, я полагался на такое поведение, и в своих функциях, которые отправляют данные, я проверяю, открыто ли еще соединение.
Однажды я обнаружил, что исправление было очевидным;просто установите состояние 'open, если функция make-network-process завершается успешно, и это блокирующий вызов.Рабочий код ниже:
(defun url-delete-process()
(when *url-process*
(delete-process *url-process*)
(setq *url-state* 'closed)))
(defun url-hai(host port blocking)
(setq *url-state* 'opening)
(url-delete-process)
(let ((p
(make-network-process :name "url"
:host host
:service port
:nowait (not blocking)
:filter #'url-filter
:sentinel #'url-sentinel
:buffer (get-buffer-create "*url*"))))
(if p
(progn
(if blocking
(setf *url-state* 'open))
(setf *url-process* p)))))
(defun url-kthxbye()
(url-delete-process))