Chicken Scheme Snippet No.1 : TCP他

Chicken Scheme Snippet

備忘録的に、ちょっとやりたい事をChicken Scheme用スニペットを書いていってみます。

TCP Socket

http://wiki.call-cc.org/man/4/Unit%20tcp
クライアント側。tcp-connectで接続するだけ。

(define-values (i o) (tcp-connect "localhost" 1234))
(write-line "hoge" o)
(write-line (read-line i))

サーバー側。tcp-listenとtcp-acceptを使う。

(use tcp)

(define l (tcp-listen 1234))
(let-values ( [(i o) (tcp-accept l)] )
  (write-line (read-line i) o)
  (close-input-port i)
  (close-output-port o))

その他

pon!

ある値が特定の条件の時だけ、別の値にする関数。
確かあったと思いつつ、名前が思い出せなかったので。

(define (pon pred old new) (if (pred old) new old))

HTTPリクエストヘッダ

HTTPリクエストヘッダは行単位でデータがあり、
空行でデータ部と区切られているのでそういうリーダーが欲しかった。

(use srfi-13 pred ports)
(define (pasrse-http-header in)
  (port-map pred (cut pon string-null? (read-line in) #!eof)))