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 descriptor_table_size is set before changing privileges.
macournoyer (author)
Sun Feb 17 22:04:27 -0800 2008
commit  213a04207ce7fda3ff4c2c5fe295eb0f267278a8
tree    0379479eafe98bd71ee883d8929002be4cc894e6
parent  0304be1fba740856f583483299d0424778cfe468
...
56
57
58
59
60
 
 
61
62
63
...
102
103
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
106
107
...
118
119
120
121
122
123
124
125
...
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
 
200
201
...
56
57
58
 
 
59
60
61
62
63
...
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
...
133
134
135
 
 
136
137
138
...
196
197
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
200
201
0
@@ -56,8 +56,8 @@
0
     # Connector handling the connections to the clients.
0
     attr_accessor :connector
0
     
0
- # Sets the maximum number of file or socket descriptors that your process may open.
0
- attr_accessor :descriptor_table_size
0
+ # Maximum number of file or socket descriptors that the server may open.
0
+ attr_reader :descriptor_table_size
0
     
0
     # Maximum number of seconds for incoming data to arrive before the connection
0
     # is dropped.
0
@@ -102,6 +102,21 @@
0
       new(*args, &block).start!
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 descriptor_table_size=(size)
0
+ @descriptor_table_size = EventMachine.set_descriptor_table_size(size)
0
+
0
+ log ">> Setting descriptor table size to #{@descriptor_table_size}"
0
+ if @descriptor_table_size < size
0
+ log "!! descriptor table size smaller then requested, " +
0
+ "run with sudo to set higher"
0
+ end
0
+
0
+ @descriptor_table_size
0
+ end
0
+
0
     # Start the server and listen for connections.
0
     # Also register signals:
0
     # * INT calls +stop+ to shutdown gracefully.
0
@@ -118,8 +133,6 @@
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
       log ">> Listening on #{@connector}, CTRL+C to stop"
0
       
0
@@ -183,20 +196,7 @@
0
           log ">> Waiting for #{@connector.size} connection(s) to finish, can take up to #{timeout} sec, CTRL+C to stop now"
0
           false
0
         end
0
- end
0
-
0
- def set_descriptor_table_size
0
- requested_descriptor_table_size = @descriptor_table_size || 4096
0
- @descriptor_table_size = EventMachine.set_descriptor_table_size(requested_descriptor_table_size)
0
-
0
- log ">> Setting descriptor table size to #{@descriptor_table_size}"
0
- if @descriptor_table_size < requested_descriptor_table_size
0
- log "!! descriptor table size smaller then requested, " +
0
- "run with sudo privileges to set higher"
0
- end
0
-
0
- @descriptor_table_size
0
- end
0
+ end
0
   end
0
 end
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0
@@ -1 +1,21 @@
0
+require File.dirname(__FILE__) + '/spec_helper'
0
+
0
+describe Server do
0
+ before do
0
+ @server = Server.new('0.0.0.0', 3000)
0
+ end
0
+
0
+ it "should set descriptor table size" do
0
+ @server.should_receive(:log).once
0
+ @server.descriptor_table_size = 100
0
+ @server.descriptor_table_size.should == 100
0
+ end
0
+
0
+ it "should warn when descriptor table size too large" do
0
+ @server.stub!(:log)
0
+ @server.should_receive(:log).with(/^!! descriptor table size smaller then requested/)
0
+ @server.descriptor_table_size = 100_000
0
+ @server.descriptor_table_size.should < 100_000
0
+ end
0
+end
...
141
142
143
144
 
145
146
147
...
141
142
143
 
144
145
146
147
0
@@ -141,7 +141,7 @@
0
     @server.timeout = 3
0
     
0
     @thread = Thread.new { @server.start }
0
- sleep 0.1 until @thread.status == 'sleep'
0
+ sleep 0.1 until @server.running? && EventMachine.reactor_running?
0
   end
0
   
0
   def stop_server

Comments

    No one has commented yet.