メッセージ。 - [日記] 朝の進捗

# [日記] 朝の進捗

今朝はちょっと早起きできたのだけど、仕事関連のメールを書いていたら半分ぐらいロスした。案外メール書くのって、30分とかかかってしまうんだなぁ。で、その後プロキシサーバー部分のデバッグをした。コードを切り出して単機能が動くサーバー/クライアントを作って単体テスト。タイポレベルのバグは退治できたのだけど、結合させてテストするとまだうまく動かない。30分とかではなかなか進まないな…。以下は、read-block!を使ったネットワークパケットの送受信テスト用に書いたコード(これはうまく動いている)。

#!/usr/bin/env gosh
(use rfc.822)
(use rfc.http)
(use gauche.net)
(use gauche.uvector)

(define (main args)
  (if (eq? (sys-fork) 0)
      (run-client)
      (run-server))
  0)

(define (run-client)
  (sys-sleep 3)
  (let1 cnt 16
    #?=(expt 2 cnt)
    (http-post "localhost:8080" "/" (make-string (expt 2 cnt) #\x))))

(debug-print-width 1024)
(define (run-server)
  (define (read-block len iport)
    (let1 vec (make-u8vector len 0)
      (let loop ((start 0) (remain len))
        (if (> len 0)
            (let1 len #?=(read-block! vec iport start)
              (if (eof-object? len)
                  vec
                  (loop (+ start len) (- remain len))))
            vec))))
  (let1 ssock (make-server-socket 'inet 8080)
    (let* ((csock (socket-accept ssock))
           (cin   (socket-input-port  csock))
           (cout  (socket-output-port csock)))
      (let* ((stat-line (read-line cin))
             (hdrs      (rfc822-header->list cin)))
        #?=stat-line
        #?=hdrs
        (let1 clen (rfc822-header-ref hdrs "content-length")
          (read-block (x->number clen) cin))
        (display "HTTP/1.0 200 OK\r\ncontent-type: text/plain\r\n\r\nOK"
                 cout)
        ))))
Gaucheでread-block!を使ったネットワークパケットの送受信テスト用コード
2010-03-10 08:38:27 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。