sockets
provides access to TCP/IP sockets for interprocess
and network communication.
(open-socket) -> socket
(open-socket port-number) -> socket
(socket-port-number socket) -> integer
(close-socket socket)
(socket-accept socket) -> input-port output-port
(get-host-name) -> string
Open-socket
creates a new socket.
If no port-number
is supplied the system picks one at random.
Socket-port-number
returns a socket's port number.
Close-socket
closes a socket, preventing any further connections.
Socket-accept
accepts a single connection on socket
, returning
an input port and an output port for communicating with the client.
If no client is waiting socket-accept
blocks until one appears.
Get-host-name
returns the network name of the machine.
Socket-client
connects to the server at port-number
on
the machine named host-name
.
Socket-client
blocks until the server accepts the connection.
The following simple example shows a server and client for a centralized UID service.
(define (id-server) (let ((socket (open-socket))) (display "Waiting on port ") (display (socket-port-number socket)) (newline) (let loop ((next-id 0)) (call-with-values (lambda () (socket-accept socket)) (lambda (in out) (display next-id out) (close-input-port in) (close-output-port out) (loop (+ next-id 1))))))) (define (get-id machine port-number) (call-with-values (lambda () (socket-client machine port-number)) (lambda (in out) (let ((id (read in))) (close-input-port in) (close-output-port out) id))))