

以下のソースコードは，echo関数でクライアントからのリクエストを読み込んでいます．  
HTTPのヘッダまでは読み込むことができるのですが，メッセージボディを読み込むことができません．  
# read-charで処理が止まっているようです．

これは，私のソースコードを書き換えることで解決できる問題なのでしょうか？  
もしそうでしたら，理由を教えて頂けないでしょうか．

よろしくお願いいたします．

クライアントの表示結果

[code]

    $ curl http://localhost:8080/test -X POST -d "Message Body"
    POST /test HTTP/1.1
    Host: localhost:8080
    User-Agent: curl/7.43.0
    Accept: */*
    Content-Length: 12
    Content-Type: application/x-www-form-urlencoded
    
[/code]

ソースコード

[code]

    #!/bin/sh
    #|-*- mode:lisp -*-|#
    #|
    exec ros -Q -- $0 "$@"
    |#
    
    (ql:quickload :usocket)
    
    
    (defun echo (stream)
      (loop for input = (read-char stream nil nil)
            while input do
            (progn
              (format t "~a" input)
              (write-char input stream)
              (force-output stream))))
    
    (defun make-server-socket (port address)
      (usocket:socket-listen address port :reuseaddress t))
    
    (defun handler (client)
      (with-open-stream (stream (usocket:socket-stream client))
                        (echo stream)))
    
    (defun accept (server)
      (usocket:socket-accept server))
    
    (defun dispose (server)
      (format t "dispose server~%")
      (usocket:socket-close server))
    
    (defun start (&key (port 8080) (address "localhost"))
      (format t "start server~%")
      (let ((server-sock (make-server-socket port address)))
        (unwind-protect
            (loop (handler (accept server-sock)))
          (dispose server-sock))))
    
    (defun main (&rest argv)
      (declare (ignorable argv))
      (start))
    
[/code]

<https://gist.github.com/mocchit/2035d034931721798182>


CC BY-SA 3.0
2015-11-29T15:20:16.227
19443
2015-11-29T15:20:16.227
12548
question
common-lisp socket
usocketのストリームから読み込むことができない