0

具体的には ccl を使用して、同じプログラムに 2 つのソケットをセットアップして、FIFO データ構造として機能させようとしています。

そのために、私はAPIの理解を深めるためにテストコードを立ち上げてきましたが、今では理解できない問題があります。次の抜粋されたコードは、リッスンとリッスンに接続するための 2 つのソケットをセットアップし、リッスン ソケットで接続を受け入れます (受け入れ呼び出しは、戻る前に接続が着信するのを待ちます。この場合はこれが必要です)。 、その後、一方のソケットに書き込み、もう一方のソケットから読み取ります。コードがハングしますが、その理由はわかりません (ソケットが接続されていないためだと思います)。

コード:

(ccl:with-open-socket (lsock :local-port 8008 :connect :passive :address-family :internet) 
    (ccl:with-open-socket (tsock :address-family :internet :remote-port 8008 :remote-host "127.0.0.1") 
       (let ((stream (ccl:accept-connection lsock))) 
          (write "can you see?" :stream tsock)
          (read stream))))
4

1 に答える 1

1

ハングは読み取り呼び出しで発生したことがわかりました.... 書き込み呼び出しの後に (stream-force-output) が必要です。テスト済みで動作します。ソケットも明示的な呼び出しなしでは閉じないようです (lsock、tsock、およびストリームを閉じます...それはバグでしょうか?別の質問ですが。

于 2015-06-26T00:05:56.460 に答える