And I actually used has_request_body, getting the same output (req='-----------------------------9357852613357'):
[code]sub procdata {
$req = shift;
$body = $req->request_body;
$req->send_http_header('text/html');
$req->print("req='",$body,"'");
return OK;
}
sub handle {
$req = shift;
return DECLINED unless ($req->request_method eq 'POST');
return 400 unless $req->has_request_body(\&procdata);
return OK;
}[/code]
Just uploading a file to /upload directly gave expected results. Also, here's a part of the debug log, when the last buffer is being written (notice the Resource temporarily unavailable and Connection reset by peer messages):
[code]2010/03/29 11:45:21 [debug] 31141#0: *1 http chunk: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 write old buf t:1 f:0 0000000000687690, pos 0000000000687690, size: 155 file: 0, size: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 write old buf t:1 f:0 0000000000000000, pos 0000000000687880, size: 4 file: 0, size: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 write old buf t:1 f:0 0000000000687790, pos 0000000000687790, size: 48 file: 0, size: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 write old buf t:0 f:0 0000000000000000, pos 000000000045F212, size: 2 file: 0, size: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 write new buf t:0 f:0 0000000000000000, pos 000000000045E10A, size: 5 file: 0, size: 0
2010/03/29 11:45:21 [debug] 31141#0: *1 http write filter: l:1 f:0 s:214
2010/03/29 11:45:21 [debug] 31141#0: *1 http write filter limit 0
2010/03/29 11:45:21 [debug] 31141#0: *1 writev: 214
2010/03/29 11:45:21 [debug] 31141#0: *1 http write filter 0000000000000000
2010/03/29 11:45:21 [debug] 31141#0: *1 copy filter: 0 "/upload?"
2010/03/29 11:45:21 [debug] 31141#0: *1 http finalize request: 0, "/upload?" 1
2010/03/29 11:45:21 [debug] 31141#0: *1 event timer add: 3: 5000:1269852326897
2010/03/29 11:45:21 [debug] 31141#0: *1 http lingering close handler
2010/03/29 11:45:21 [debug] 31141#0: *1 recv: fd:3 -1 of 4096 2010/03/29 11:45:21 [debug] 31141#0: *1 recv() not ready (11: Resource temporarily unavailable) 2010/03/29 11:45:21 [debug] 31141#0: *1 lingering read: -2
2010/03/29 11:45:21 [debug] 31141#0: *1 event timer: 3, old: 1269852326897, new: 1269852326897
2010/03/29 11:45:21 [debug] 31141#0: *1 call_sv: 0 2010/03/29 11:45:21 [debug] 31141#0: *1 perl handler done: 0
2010/03/29 11:45:21 [debug] 31141#0: timer delta: 1
2010/03/29 11:45:21 [debug] 31141#0: posted events 0000000000000000
2010/03/29 11:45:21 [debug] 31141#0: worker cycle
2010/03/29 11:45:21 [debug] 31141#0: epoll timer: 5000
2010/03/29 11:45:21 [debug] 31141#0: epoll: fd:3 ev:0019 d:00007F82719C0170
2010/03/29 11:45:21 [debug] 31141#0: epoll_wait() error on fd:3 ev:0019
2010/03/29 11:45:21 [debug] 31141#0: *1 http lingering close handler
2010/03/29 11:45:21 [debug] 31141#0: *1 recv: fd:3 -1 of 4096
2010/03/29 11:45:21 [info] 31141#0: *1 recv() failed (104: Connection reset by peer), client: 62.XX.YYY.ZZ, server: yyy.com, request: "POST /upload HTTP/1.1", host: "...", referrer: "..."
2010/03/29 11:45:21 [debug] 31141#0: *1 lingering read: -1
2010/03/29 11:45:21 [debug] 31141#0: *1 http close request
2010/03/29 11:45:21 [debug] 31141#0: *1 http log handler
2010/03/29 11:45:21 [debug] 31141#0: *1 run cleanup: 00000000007DF7B0
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 0000000000730FF0
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 00000000007DE7F0, unused: 5
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 0000000000686CD0, unused: 656
2010/03/29 11:45:21 [debug] 31141#0: *1 close http connection: 3
2010/03/29 11:45:21 [debug] 31141#0: *1 event timer del: 3: 1269852326897
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 0000000000680810
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 0000000000730580
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 00000000006A00E0, unused: 8
2010/03/29 11:45:21 [debug] 31141#0: *1 free: 00000000006A01F0, unused: 128
2010/03/29 11:45:21 [debug] 31141#0: timer delta: 53
2010/03/29 11:45:21 [debug] 31141#0: posted events 0000000000000000
2010/03/29 11:45:21 [debug] 31141#0: worker cycle
2010/03/29 11:45:21 [debug] 31141#0: epoll timer: -1[/code]