ry / ebb fork watch download tarball
public
Description: web server
Homepage: http://ebb.rubyforge.org
Clone URL: git://github.com/ry/ebb.git
Search Repo:
Merge /Users/ry/gnosek_ebb
ryah (author)
Sun Apr 06 07:52:21 -0700 2008
commit  3a056d749c4e73b92c0ce3b7d325005a555d6a69
tree    bfc2cc03fe2d2652617cdd777b594bfb3a10ca91
parent  ea175093f9ef1bd0f8add2a478dc6b80d6bb1dc1 parent  7b306f2dc60be6209b71f31b92db5a27b62e540f
...
16
17
18
19
20
 
 
 
 
 
 
21
22
23
...
16
17
18
 
 
19
20
21
22
23
24
25
26
27
0
@@ -16,8 +16,12 @@
0
     end
0
     
0
     Client::BASE_ENV['rack.multithread'] = threaded_processing
0
-
0
- FFI::server_listen_on_port(port)
0
+
0
+ if options.has_key?(:fileno)
0
+ FFI::server_listen_on_fd(options[:fileno].to_i)
0
+ else
0
+ FFI::server_listen_on_port(port)
0
+ end
0
     @running = true
0
     trap('INT') { stop_server }
0
     
...
130
131
132
133
 
 
134
135
136
...
238
239
240
241
 
 
242
243
244
...
476
477
478
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
479
480
481
...
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
 
 
 
 
 
 
 
529
530
531
...
130
131
132
 
133
134
135
136
137
...
239
240
241
 
242
243
244
245
246
...
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
...
533
534
535
 
 
 
 
 
 
 
 
 
 
 
 
536
537
538
539
540
541
542
543
544
545
0
@@ -130,7 +130,8 @@
0
   
0
   /* set blocking socket */
0
   int flags = fcntl(client->fd, F_GETFL, 0);
0
- assert(0 <= fcntl(client->fd, F_SETFL, flags & ~O_NONBLOCK));
0
+ int ret = fcntl(client->fd, F_SETFL, flags & ~O_NONBLOCK);
0
+ assert(0 <= ret);
0
   
0
   if(0 > mkstemp(filename)) {
0
     perror("mkstemp()");
0
@@ -238,7 +239,8 @@
0
       /* read body into file - in a thread */
0
       ev_io_stop(loop, watcher);
0
       pthread_t thread;
0
- assert(0 <= pthread_create(&thread, NULL, read_body_into_file, client));
0
+ int ret = pthread_create(&thread, NULL, read_body_into_file, client);
0
+ assert(0 <= ret);
0
       pthread_detach(thread);
0
       return;
0
     }
0
@@ -476,6 +478,23 @@
0
   }
0
 }
0
 
0
+int ebb_server_listen_on_fd(ebb_server *server, const int sfd)
0
+{
0
+ set_nonblock(sfd);
0
+
0
+ server->fd = sfd;
0
+ server->port = NULL;
0
+ assert(server->open == FALSE);
0
+ server->open = TRUE;
0
+
0
+ server->request_watcher.data = server;
0
+ ev_init (&server->request_watcher, on_request);
0
+ ev_io_set (&server->request_watcher, server->fd, EV_READ | EV_ERROR);
0
+ ev_io_start (server->loop, &server->request_watcher);
0
+
0
+ return server->fd;
0
+}
0
+
0
 int ebb_server_listen_on_port(ebb_server *server, const int port)
0
 {
0
   int sfd = -1;
0
@@ -514,18 +533,13 @@
0
     perror("listen()");
0
     goto error;
0
   }
0
- server->fd = sfd;
0
- server->port = malloc(sizeof(char)*8); /* for easy access to the port */
0
- sprintf(server->port, "%d", port);
0
- assert(server->open == FALSE);
0
- server->open = TRUE;
0
-
0
- server->request_watcher.data = server;
0
- ev_init (&server->request_watcher, on_request);
0
- ev_io_set (&server->request_watcher, server->fd, EV_READ | EV_ERROR);
0
- ev_io_start (server->loop, &server->request_watcher);
0
-
0
- return server->fd;
0
+
0
+ int ret = ebb_server_listen_on_fd(server, sfd);
0
+ if (ret >= 0) {
0
+ server->port = malloc(sizeof(char)*8); /* for easy access to the port */
0
+ sprintf(server->port, "%d", port);
0
+ }
0
+ return ret;
0
 error:
0
   if(sfd > 0) close(sfd);
0
   return -1;
...
81
82
83
 
84
85
86
...
81
82
83
84
85
86
87
0
@@ -81,6 +81,7 @@
0
                     , ebb_request_cb request_cb
0
                     , void *request_cb_data
0
                     );
0
+int ebb_server_listen_on_fd(ebb_server*, const int sfd);
0
 int ebb_server_listen_on_port(ebb_server*, const int port);
0
 int ebb_server_listen_on_socket(ebb_server*, const char *socketpath);
0
 void ebb_server_unlisten(ebb_server*);
...
71
72
73
 
 
 
 
 
 
 
74
75
76
...
262
263
264
 
265
266
267
...
71
72
73
74
75
76
77
78
79
80
81
82
83
...
269
270
271
272
273
274
275
0
@@ -71,6 +71,13 @@
0
   attach_idle_watcher();
0
 }
0
 
0
+VALUE server_listen_on_fd(VALUE _, VALUE sfd)
0
+{
0
+ if(ebb_server_listen_on_fd(server, FIX2INT(sfd)) < 0)
0
+ rb_sys_fail("Problem listening on FD");
0
+ return Qnil;
0
+}
0
+
0
 VALUE server_listen_on_port(VALUE _, VALUE port)
0
 {
0
   if(ebb_server_listen_on_port(server, FIX2INT(port)) < 0)
0
@@ -262,6 +269,7 @@
0
   DEF_GLOBAL(http_version, "HTTP_VERSION");
0
   
0
   rb_define_singleton_method(mFFI, "server_process_connections", server_process_connections, 0);
0
+ rb_define_singleton_method(mFFI, "server_listen_on_fd", server_listen_on_fd, 1);
0
   rb_define_singleton_method(mFFI, "server_listen_on_port", server_listen_on_port, 1);
0
   rb_define_singleton_method(mFFI, "server_unlisten", server_unlisten, 0);
0
   rb_define_singleton_method(mFFI, "server_open?", server_open, 0);
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
0
@@ -1 +1,30 @@
0
+require File.dirname(__FILE__) + '/helper'
0
+
0
+class BasicTestFD < ServerTestFD
0
+ def test_get_bytes
0
+ [1,10,1000].each do |i|
0
+ response = get("/bytes/#{i}")
0
+ assert_equal "#{'C'*i.to_i}", response['output']
0
+ end
0
+ end
0
+
0
+ def test_get_unknown
0
+ response = get('/blah')
0
+ assert_equal "Undefined url", response['output']
0
+ end
0
+
0
+ def test_small_posts
0
+ [1,10,321,123,1000].each do |i|
0
+ response = post("/test_post_length", 'C'*i)
0
+ assert_equal 200, response['status']
0
+ end
0
+ end
0
+
0
+ def test_large_post
0
+ [50,60,100].each do |i|
0
+ response = post("/test_post_length", 'C'*1024*i)
0
+ assert_equal 200, response['status']
0
+ end
0
+ end
0
+end
...
84
85
86
 
 
 
 
 
 
 
 
 
 
 
 
 
...
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
0
@@ -84,4 +84,17 @@
0
     assert true
0
   end
0
 end
0
+
0
+class ServerTestFD < ServerTest
0
+ def setup
0
+ @tcp_server = TCPServer.new('0.0.0.0', TEST_PORT);
0
+ Thread.new { Ebb.start_server(HelperApp.new, :fileno => @tcp_server.fileno) }
0
+ sleep 0.1 until Ebb.running?
0
+ end
0
+
0
+ def teardown
0
+ super
0
+ @tcp_server = nil
0
+ end
0
+end

Comments

    No one has commented yet.