Shammer's Philosophy

My private adversaria

LispでServerSocketを作成

Socketの作成には、make-socket関数を使用する。引数がたくさんあるが、make-socketのドキュメント(Clozure CL Documentation)には使用例がいくつか紹介されている。
今回は、ServerSocketなのでlistener-socketを参考にする。

?(make-socket :type :stream :connect :passive)
#<CCL::LISTENER-SOCKET #xC4D5356>
?

単純にドキュメント通りやってみたが、これではどのポートをリスンしているかとか全然わからないし、作成したSocketにアクセスすることもできない。この点を改善するとこんな感じか。

?(setf server (make-socket :type :stream :connect :passive :local-host "localhost" :local-port '7001))
#<CCL::LISTENER-SOCKET #xC4D664E>
?

ほかにも様々なオプションを指定してSocketをOpenできる。具体的に指定できるオプションは、Clozure CL Documentationにある。
上記コマンド実行後、netstat を取得。

$ netstat -an | grep 7001
tcp4       0      0  127.0.0.1.7001         *.*                    LISTEN
$

ここで、このSocketをクローズしてみる。

?(close server)
T
?

もう一度netstatを取得すると、

$netstat -an | grep 7001
$ 

完璧だ。