Skip to content

Instantly share code, notes, and snippets.

@yamasushi
Created July 20, 2012 22:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamasushi/3153651 to your computer and use it in GitHub Desktop.
Save yamasushi/3153651 to your computer and use it in GitHub Desktop.
http-getから入力ポートをつくりだすための試験場
(use rfc.http)
(use gauche.generator)
(define (http-hook-receiver proc)
(lambda (code hdrs total retr)
;#?= code
;#?= hdrs
(let loop [ ]
(receive (port size) (retr)
;#?= port
;#?= size
(cond
[ (eqv? size 0) #t]
[ (or (not size) (> size 0) )
(let loop-rb [(data (read-block size port) )
(req-size size) ]
(let1 nrest (- req-size (string-length data))
;#?= (string-length data)
;#?= req-size
;#?= nrest
(proc data)
(if (= nrest 0)
(loop)
(loop-rb (read-block nrest port) nrest ) ) ) ) ]
) ) ) ) )
(define (http-get-generator host path)
(generate
(^ (yield)
(http-get host path
:receiver (http-hook-receiver
(^x
#?= x
(yield x) )) )
) ) )
(define (main args)
(do-generator (p (http-get-generator "www.google.com" "/"))
(debug-print p)
))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment