メッセージ。 - [日記] 朝の進捗
# [日記] 朝の進捗
今朝はちょっと早起きできたのだけど、仕事関連のメールを書いていたら半分ぐらいロスした。案外メール書くのって、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!を使ったネットワークパケットの送受信テスト用コード
Comment
Trackback