public
Description: A very fast & simple Ruby web server
Homepage: http://code.macournoyer.com/thin/
Clone URL: git://github.com/macournoyer/thin.git
Search Repo:
Make sure set_descriptor_table_size is called before changing privileges 
(again! aah damn me)
macournoyer (author)
Wed Feb 20 20:31:01 -0800 2008
commit  ad7d483fc4aed44f8092030ad94d7a5cfa6ce531
tree    c03bbd31186ab0df6998c3f006af77b963c925d6
parent  2b7d72da3fd20c760eafefa2ad569fa77a6846c0
...
42
43
44
45
46
47
48
 
 
 
 
 
49
50
51
...
42
43
44
 
 
 
 
45
46
47
48
49
50
51
52
0
@@ -42,10 +42,11 @@
0
         server.maximum_connections = @options[:max_conns]
0
         server.maximum_persistent_connections = @options[:max_persistent_conns]
0
 
0
- if @options[:daemonize]
0
- server.daemonize
0
- server.change_privilege @options[:user], @options[:group] if @options[:user] && @options[:group]
0
- end
0
+ server.daemonize if @options[:daemonize]
0
+
0
+ # Must be called before changing privileges since it might require superuser power.
0
+ server.set_descriptor_table_size!
0
+ server.change_privilege @options[:user], @options[:group] if @options[:user] && @options[:group]
0
 
0
         # If a Rack config file is specified we eval it inside a Rack::Builder block to create
0
         # a Rack adapter from it. DHH was hacker of the year a couple years ago so we default
...
101
102
103
 
 
104
105
106
...
126
127
128
129
130
131
132
133
134
135
 
136
137
138
...
186
187
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
190
191
...
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
 
 
 
 
 
 
221
222
...
101
102
103
104
105
106
107
108
...
128
129
130
 
 
 
 
 
 
 
131
132
133
134
...
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
...
215
216
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
219
220
221
222
223
224
225
0
@@ -101,6 +101,8 @@
0
       
0
       # If in debug mode, wrap in logger adapter
0
       @app = Rack::CommonLogger.new(@app) if Logging.debug?
0
+
0
+ log_header
0
     end
0
     
0
     # Lil' shortcut to turn this:
0
@@ -126,13 +128,7 @@
0
             
0
       # See http://rubyeventmachine.com/pub/rdoc/files/EPOLL.html
0
       EventMachine.epoll
0
-
0
- log ">> Thin web server (v#{VERSION::STRING} codename #{VERSION::CODENAME})"
0
- debug ">> Debugging ON"
0
- trace ">> Tracing ON"
0
-
0
- set_descriptor_table_size
0
-
0
+
0
       log ">> Listening on #{@connector}, CTRL+C to stop"
0
       
0
       @running = true
0
@@ -186,6 +182,22 @@
0
       @running
0
     end
0
     
0
+ # Set the maximum number of socket descriptors that the server may open.
0
+ # The process needs to have required privilege to set it higher the 1024 on
0
+ # some systems.
0
+ def set_descriptor_table_size!
0
+ requested_maximum_connections = @maximum_connections
0
+ @maximum_connections = EventMachine.set_descriptor_table_size(requested_maximum_connections)
0
+
0
+ log ">> Setting maximum connections to #{@maximum_connections}"
0
+ if @maximum_connections < requested_maximum_connections
0
+ log "!! Maximum connections smaller then requested, " +
0
+ "run with sudo to set higher"
0
+ end
0
+
0
+ @maximum_connections
0
+ end
0
+
0
     protected
0
       def wait_for_connections_and_stop
0
         if @connector.empty?
0
@@ -203,21 +215,12 @@
0
         trap('TERM') { stop! }
0
       end
0
       
0
- # Set the maximum number of socket descriptors that the server may open.
0
- # The process needs to have required privilege to set it higher the 1024 on
0
- # some systems.
0
- def set_descriptor_table_size
0
- requested_maximum_connections = @maximum_connections
0
- @maximum_connections = EventMachine.set_descriptor_table_size(requested_maximum_connections)
0
-
0
- log ">> Setting maximum connections to #{@maximum_connections}"
0
- if @maximum_connections < requested_maximum_connections
0
- log "!! Maximum connections smaller then requested, " +
0
- "run with sudo to set higher"
0
- end
0
-
0
- @maximum_connections
0
- end
0
+ def log_header
0
+ log ">> Thin web server (v#{VERSION::STRING} codename #{VERSION::CODENAME})"
0
+ debug ">> Debugging ON"
0
+ trace ">> Tracing ON"
0
+ end
0
+
0
   end
0
 end
...
8
9
10
11
 
12
13
14
...
16
17
18
19
 
20
21
22
...
8
9
10
 
11
12
13
14
...
16
17
18
 
19
20
21
22
0
@@ -8,7 +8,7 @@
0
   it "should set descriptor table size" do
0
     @server.should_receive(:log).once
0
     @server.maximum_connections = 100
0
- @server.send(:set_descriptor_table_size)
0
+ @server.set_descriptor_table_size!
0
     @server.maximum_connections.should == 100
0
   end
0
 
0
@@ -16,7 +16,7 @@
0
     @server.stub!(:log)
0
     @server.should_receive(:log).with(/^!!/)
0
     @server.maximum_connections = 100_000
0
- @server.send(:set_descriptor_table_size)
0
+ @server.set_descriptor_table_size!
0
     @server.maximum_connections.should < 100_000
0
   end
0
 end

Comments

    No one has commented yet.