56 lines
1.4 KiB
Scheme
56 lines
1.4 KiB
Scheme
|
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
|
||
|
|
||
|
|
||
|
; Using sockets from Scheme 48.
|
||
|
|
||
|
; Server. To make your program be a server, do
|
||
|
; (call-with-values socket-server
|
||
|
; (lambda (port-number accept)
|
||
|
; (display "Port number is ") (write port-number) (newline)
|
||
|
; (call-with-values accept
|
||
|
; (lambda (i-port o-port)
|
||
|
; ... have fun ...))))
|
||
|
|
||
|
(define (socket-server)
|
||
|
(let ((s (internet-stream-socket)))
|
||
|
(values (socket-bind s)
|
||
|
(lambda ()
|
||
|
(fd->ports (socket-accept s))))))
|
||
|
|
||
|
; Client. To make your program be a client, do
|
||
|
; (call-with-values (lambda ()
|
||
|
; (socket-client "foo.mit.edu" port-number))
|
||
|
; (lambda (i-port o-port)
|
||
|
; ... have fun ...))
|
||
|
|
||
|
(define (socket-client host-name port-number)
|
||
|
(fd->ports (socket-connect host-name port-number)))
|
||
|
|
||
|
|
||
|
; vm-extension calls
|
||
|
|
||
|
(define (internet-stream-socket)
|
||
|
(vm-extension 20 #f))
|
||
|
|
||
|
(define (socket-bind s)
|
||
|
(vm-extension 21 s))
|
||
|
|
||
|
(define (socket-accept s)
|
||
|
(vm-extension 22 s))
|
||
|
|
||
|
(define (socket-connect host-name port-number)
|
||
|
(vm-extension 23 (cons host-name port-number)))
|
||
|
|
||
|
(define (fd->ports fd)
|
||
|
(values (fd->input-port fd) (fd->output-port fd)))
|
||
|
|
||
|
(define (fd->input-port fd)
|
||
|
(let ((port (open-input-file "/dev/null")))
|
||
|
(vm-extension 24 (cons port fd))
|
||
|
port))
|
||
|
|
||
|
(define (fd->output-port fd)
|
||
|
(let ((port (open-output-file "/dev/null")))
|
||
|
(vm-extension 25 (cons port fd))
|
||
|
port))
|