(linenum→info "unix/slp.c:2238")

gauche/0.8.12/examples/echo-server.scm

    1: ;; Example of gauche.selector
    2: ;;  $Id: echo-server.scm,v 1.2 2003/09/28 12:46:04 shirok Exp $
    3: 
    4: (use gauche.net)
    5: (use gauche.selector)
    6: 
    7: (define (echo-server port)
    8:   (let ((selector (make <selector>))
    9:         (servers  (make-server-sockets #f port :reuse-addr? #t)))
   10: 
   11:     (define (echo client input output)
   12:       (let ((str (read-block 4096 input)))
   13:         (if (eof-object? str)
   14:             (begin (selector-delete! selector input #f #f)
   15:                    (socket-close client))
   16:             (begin (display str output)
   17:                    (flush output)))))
   18: 
   19:     (for-each
   20:      (lambda (server)
   21: 
   22:        (define (accept-handler sock flag)
   23:          (let* ((client (socket-accept server))
   24:                 (output (socket-output-port client)))
   25:            (selector-add! selector
   26:                           (socket-input-port client :buffered? #f)
   27:                           (lambda (input flag)
   28:                             (echo client input output))
   29:                           '(r))))
   30: 
   31:        (selector-add! selector
   32:                       (socket-fd server)
   33:                       accept-handler
   34:                       '(r)))
   35:      servers)
   36:     (do () (#f) (selector-select selector))))
   37: 
   38: (define (main args)
   39:   (print "echo server starting on port 3131")
   40:   (echo-server 3131)
   41:   0)
Syntax (Markdown)