#!/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")