Mercurial > hg > ngx_http_upstream_keepalive
annotate t/fastcgi-keepalive.t @ 24:2ee28064a04a 0.4
Keepalive: correctly close connections on gracefull shutdown.
On gracefull shutdown nginx calls read handler on all idle connections with
c->close set. Make sure we don't confuse such read handler calls with stale
events and actually close connections. This fixes "open socket ... left
in connection ..." alerts.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 15 Dec 2010 21:12:36 +0300 |
parents | 8d8eaaf07663 |
children | e10649a96f39 |
rev | line source |
---|---|
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Test for fastcgi backend with keepalive. |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 use Test::Nginx; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 select STDERR; $| = 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 select STDOUT; $| = 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 my $t = Test::Nginx->new()->plan(6) |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 ->write_file_expand('nginx.conf', <<'EOF'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
20 | 23 %%TEST_GLOBALS%% |
24 | |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 master_process off; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 daemon off; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 events { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 http { |
20 | 32 %%TEST_GLOBALS_HTTP%% |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 upstream backend { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 server 127.0.0.1:8081; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 keepalive 1; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 server { |
20 | 40 listen 127.0.0.1:8080; |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 server_name localhost; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 location / { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 fastcgi_pass backend; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 EOF |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 $t->run_daemon(\&fastcgi_test_daemon); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 $t->run(); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
56 { |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
57 local $TODO = 'needs experimental patches'; |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
58 local $SIG{__WARN__} = sub {}; |
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
59 |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 like(http_get('/'), qr/SEE-THIS/, 'fastcgi request'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 like(http_get('/redir'), qr/302/, 'fastcgi redirect'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 like(http_get('/'), qr/^request: 3$/m, 'fastcgi third request'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 like(http_get('/single'), qr/^connection: 1$/m, 'single connection used'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 # New connection to fastcgi application should be established after HEAD |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 # requests since nginx doesn't read whole response (as it doesn't need |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 # body). |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 unlike(http_head('/head'), qr/SEE-THIS/, 'no data in HEAD'); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 local $TODO = 'needs experimental patches'; |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
76 local $SIG{__WARN__} = sub {}; |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 like(http_get('/after'), qr/^connection: 2$/m, 'new connection after HEAD'); |
15
4fe7e417c424
Keepalive: fix fastcgi tests to be actually TODO.
Maxim Dounin <mdounin@mdounin.ru>
parents:
14
diff
changeset
|
79 |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 ############################################################################### |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 # Simple FastCGI responder implementation. Unlike FCGI and FCGI::Async it's |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 # able to count connections. |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 # http://www.fastcgi.com/devkit/doc/fcgi-spec.html |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 sub fastcgi_read_record($) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 my ($socket) = @_; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 my ($n, $h, $header); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 $n = $socket->read($header, 8); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 return undef if !defined $n or $n != 8; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 @{$h}{qw/ version type id clen plen /} = unpack("CCnnC", $header); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 $n = $socket->read($h->{content}, $h->{clen}); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 return undef if $n != $h->{clen}; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 $n = $socket->read($h->{padding}, $h->{plen}); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 return undef if $n != $h->{plen}; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 $h->{socket} = $socket; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 return $h; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 sub fastcgi_respond($$) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 my ($h, $body) = @_; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 # stdout |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 length($body), 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 $h->{socket}->write($body); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 |
16
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
117 # write some text to stdout and stderr splitted over multiple network |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
118 # packets to test if we correctly set pipe length in various places |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
119 |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
120 my $tt = "test text, just for test"; |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
121 |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
122 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
123 length($tt . $tt), 0) . $tt); |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 select(undef, undef, undef, 0.1); |
16
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
125 $h->{socket}->write($tt . pack("CC", $h->{version}, 7)); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
126 select(undef, undef, undef, 0.1); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
127 $h->{socket}->write(pack("nnCx", $h->{id}, length($tt), 0)); |
28f882414188
Keepalive: better fastcgi testing.
Maxim Dounin <mdounin@mdounin.ru>
parents:
15
diff
changeset
|
128 $h->{socket}->write($tt); |
14
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 # close stdout |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 $h->{socket}->write(pack("CCnnCx", $h->{version}, 6, $h->{id}, 0, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 select(undef, undef, undef, 0.1); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 # end request |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 $h->{socket}->write(pack("CCnnCx", $h->{version}, 3, $h->{id}, 8, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 $h->{socket}->write(pack("NCxxx", 0, 0)); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 sub fastcgi_test_daemon { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 my $server = IO::Socket::INET->new( |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 Proto => 'tcp', |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 LocalAddr => '127.0.0.1:8081', |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 Listen => 5, |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 Reuse => 1 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 ) |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 or die "Can't create listening socket: $!\n"; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 local $SIG{PIPE} = 'IGNORE'; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 my $ccount = 0; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 my $rcount = 0; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 while (my $client = $server->accept()) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 $client->autoflush(1); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 Test::Nginx::log_core('||', "fastcgi connection"); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 $ccount++; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 while (my $h = fastcgi_read_record($client)) { |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 Test::Nginx::log_core('||', "fastcgi record: " |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 . " $h->{version}, $h->{type}, $h->{id}, " |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 . "'$h->{content}'"); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 # skip everything unless stdin, then respond |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 next if $h->{type} != 5; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 $rcount++; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 # respond |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 fastcgi_respond($h, <<EOF); |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 Location: http://localhost:8080/redirect |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 Content-Type: text/html |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 SEE-THIS |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 request: $rcount |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 connection: $ccount |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 EOF |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 close $client; |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 } |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 |
28af4b0b32c1
Keepalive: experimental fastcgi support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 ############################################################################### |