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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
23 %%TEST_GLOBALS%%
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
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
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
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
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 16
diff changeset
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 ###############################################################################