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))))
Previous: Fluid bindings | Next: Macros for writing loops