#!/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)
  (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))
      (newline)
      (close-input-port ip)
      (close-output-port op))))

(http-cat "www.google.com")
;(http-cat "127.0.0.1")