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