mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-21 06:39:17 +02:00
23 lines
1 KiB
Scheme
23 lines
1 KiB
Scheme
;; net.scm -- the high-level network interface
|
|
;; Copyright (c) 2009 Alex Shinn. All rights reserved.
|
|
;; BSD-style license: http://synthcode.com/license.txt
|
|
|
|
(define (with-net-io host service proc)
|
|
(let lp ((addr (get-address-info host service #f)))
|
|
(if (not addr)
|
|
(error "couldn't find address" host service)
|
|
(let ((sock (socket (address-info-family addr)
|
|
(address-info-socket-type addr)
|
|
(address-info-protocol addr))))
|
|
(if (negative? sock)
|
|
(lp (address-info-next addr))
|
|
(if (negative?
|
|
(connect sock
|
|
(address-info-address addr)
|
|
(address-info-address-length addr)))
|
|
(lp (address-info-next addr))
|
|
(let ((in (open-input-file-descriptor sock))
|
|
(out (open-output-file-descriptor sock)))
|
|
(let ((res (proc in out)))
|
|
(close-input-port in)
|
|
res))))))))
|