2

CCL トップレベルで、以下を実行:

(make-socket :LOCAL-PORT 6666 :LOCAL-HOST "127.0.0.1")

また

(make-socket :LOCAL-PORT 6666 :LOCAL-HOST (lookup-hostname "localhost"))

以下を出力します。

> Error: There is no applicable method for the generic function:
>          #<STANDARD-GENERIC-FUNCTION CCL::SOCKADDR #x30200043F91F>
>        when called with arguments:
>          (NIL)
> While executing: #<CCL::STANDARD-KERNEL-METHOD NO-APPLICABLE-METHOD (T)>, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Try calling it again
> Type :? for other options.

エラーの意味がわかりません (CL の新機能)。どういう意味ですか?そして、私は何を間違っていますか?

4

1 に答える 1

5

コードの問題はMAKE-SOCKET、コメントで指定したように、パッシブ TCP ソケット (リスナー ソケット) ではなく、アクティブな TCP ソケットの作成を要求するために提供された主要なパラメーターであることです。これは、デフォルトで、:connectソケットがアクティブかパッシブかを指定するキーに値が割り当てられているためです:active

このエラー メッセージは、メソッドが存在しないCCL:SOCKADDR引数 を指定した への呼び出しがシステムで検出されたことを示しています。NILその理由は、ソケットアドレスが必要ですが、何も提供されていないためです。

SLIME で Emacs を使用すると、次のことがわかります。

  1. スタック上の最後の呼び出しのトレース: MAKE-TCP-SOCKET を呼び出す MAKE-SOCKET、%SOCKET-CONNECT を呼び出す (エラーを生成する)。

  2. 各呼び出し内の変数の値。たとえば、%SOCKET-CONNECT への呼び出し内でパラメータ SOCKET-ADDRESS が NIL であることを確認します。

  3. 3 つすべての関数のコード。調べると、ソケット アドレスが必要であることがわかりますMAKE-TCP-SOCKET。これがキー パラメータ :remote-address の値として指定されていない場合は、remote-host を使用してアドレスを解決するための呼び出しが行われます。およびリモートポート。

于 2016-12-10T07:39:51.967 に答える