lin yuansen
lin yuansen

Reputation: 1

land of lisp src webserver.lisp

while I was learning in "land of lisp" chapter 12 and 13 about "socket". I use lispbox, so I need install a socket.At last, I found usocket available. this is a sample about how to use usocket, to bulid a webserver.

(defun serve (request-handler)
  "serve as a web server,used to handle request 
   like 'http://127.0.0.1:8080/greeting'"
 (let ((socket (usocket:socket-listen "0.0.0.0" 8080 :reuse-address t)))
 (unwind-protect
   (loop (with-open-stream (stream 
                            (usocket:socket-stream 
                                      (usocket:socket-accept socket)))
            (let* ((url    (parse-url (read-line stream)))
                    (path   (car url))
                    (header (get-header stream))
                    (params (append (cdr url) 
                                    (get-content-params stream header)))
                    (*standard-output* stream))
               (funcall request-handler path header params))))
   (usocket:socket-close socket))))

the origin ‘serve’ function in http://landoflisp.com/webserver.lisp

(defun serve (request-handler)
 (let ((socket (socket-server 8080)))
 (unwind-protect
   (loop (with-open-stream (stream (socket-accept socket))
             (let* ((url    (parse-url (read-line stream)))
                    (path   (car url))
                    (header (get-header stream))
                    (params (append (cdr url) 
                                    (get-content-params stream header)))
                    (*standard-output* stream))
               (funcall request-handler path header params))))
   (socket-server-close socket))))

Upvotes: 1

Views: 439

Answers (1)

lin yuansen
lin yuansen

Reputation: 1

API definition

  • usocket (class)
  • stream-usocket (class; usocket derivative)
  • stream-server-usocket (class; usocket derivative)
  • socket-connect (function) [ to create an active/connected socket ] socket-connect host port &key element-type where `host' is a vectorized ip or a string representation of a dotted ip address or a hostname for lookup in the DNS system
  • socket-listen (function) [ to create a passive/listening socket ] socket-listen host port &key reuseaddress backlog element-type where `host' has the same definition as above
  • socket-accept (method) [ to create an active/connected socket ] socket-accept socket &key element-type returns (server side) a connected socket derived from a listening/passive socket.
  • socket-close (method) socket-close socket where socket a previously returned socket
  • socket (usocket slot accessor), the internal/implementation defined socket representation
  • socket-stream (usocket slot accessor), socket-stream socket the return value of which satisfies the normal stream interface

Upvotes: 0

Related Questions