0

この動作を軽減する方法はありますか?nilを返すか、エラーをスローした場合に最適です。

つまり、ローカルホスト上のバインドされていないソケットに接続しようとしていると仮定します-その場合make-network-processはブロックされ、後で誰かがソケットをバインドしても、それが発生したことに気付かないため、基本的にスタックします。

4

1 に答える 1

0

OK、ドキュメントにもっと注意を払う必要がありました。:nowaitこの動作を防ぐ重要な引数があります。以下は、それを処理するコード例です。

(defun haxe-network-process-sentinel (process input)
  (message "haxe-network-process-sentinel <%s>" input)
  (when (stringp input)
      (cond
       ((or
         (haxe-string-starts-with input "failed with code")
         (haxe-string-starts-with input "connection broken by"))
        (setq haxe-network-status 'error))
       ((string= input "open")
        (setq haxe-network-status 'open))
       (t (setq haxe-network-status 'open)
        (haxe-append-server-response input)))))

;;;###autoload
(defun haxe-connect-to-compiler-server ()
  "Starts HaXe compilations server and connects to it.
This function is bound to \\[haxe-connect-to-compiler-server]"
  (interactive)
  (let ((old-proc (get-process haxe-compiler-process)))
    (if (and old-proc (equal (process-status old-proc) 'open))
        (setq haxe-network-process old-proc)
      (haxe-log 3 "Trying to connect to HaXe compiler on %s:%s"
                haxe-server-host haxe-server-port)
      (while (not (eql haxe-network-status 'open))
        (setq haxe-network-process
              (make-network-process
               :name haxe-compiler-process
               :family 'ipv4
               :host haxe-server-host
               :nowait t
               :service haxe-server-port
               ;; :buffer haxe-network-process-buffer
               :sentinel #'haxe-network-process-sentinel
               :filter #'haxe-listen-filter))
        (sleep-for 1))
      (haxe-log 3 "Connected to HaXe compiler"))))
于 2012-11-14T17:48:08.853 に答える