33 lines
1.0 KiB
Scheme
33 lines
1.0 KiB
Scheme
|
#!/usr/bin/env scheme-script
|
||
|
|
||
|
(import (ikarus))
|
||
|
|
||
|
;;; very simple demo for how to connect to a server,
|
||
|
;;; send a request and receive a response.
|
||
|
|
||
|
;;; Here, we use an asynchronous IO socket. We wrap the whole
|
||
|
;;; operation with an exception handler to handle the would-block
|
||
|
;;; conditions. If we do get a would-block condition, we just
|
||
|
;;; return, causing the read/write operation to be restarted until
|
||
|
;;; it succeeds. Pretty lame at this point, but it works.
|
||
|
|
||
|
(define (http-cat host)
|
||
|
(with-exception-handler
|
||
|
(lambda (c)
|
||
|
;;; just return and let it retry until it succeeds
|
||
|
(unless (i/o-would-block-condition? c)
|
||
|
(raise c)))
|
||
|
(lambda ()
|
||
|
(let-values ([(op ip) (tcp-connect-nonblocking host "http")])
|
||
|
(let ([op (transcoded-port op (native-transcoder))]
|
||
|
[ip (transcoded-port ip (native-transcoder))])
|
||
|
(display "GET /\n" op)
|
||
|
(display (get-string-all ip))
|
||
|
(close-input-port ip)
|
||
|
(close-output-port op))))))
|
||
|
|
||
|
(http-cat "www.google.com")
|
||
|
(newline)
|
||
|
;(http-cat "127.0.0.1")
|
||
|
|