ry / ebb fork watch download tarball
public this repo is viewable by everyone
Description: web server
Homepage: http://ebb.rubyforge.org
Clone URL: git://github.com/ry/ebb.git
making server more demanding- closing connections on errors
Ryan Dahl (author)
2 months ago
commit  274c811b4e810134dbfb118402190151cc752688
tree    fe3ff28e9e3e0bded2ee4136b101f4a65389b719
parent  b33f32ed9e6d70a4684ebf9b86a687383c6121b0
...
229
230
231
232
 
233
234
235
...
244
245
246
247
248
 
 
249
250
251
...
326
327
328
329
 
330
331
332
...
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
...
496
497
498
499
 
 
 
 
 
 
 
 
500
501
502
...
506
507
508
509
510
511
512
513
514
 
 
 
 
 
 
515
516
517
...
576
577
578
 
 
 
579
580
581
...
229
230
231
 
232
233
234
235
...
244
245
246
 
 
247
248
249
250
251
...
326
327
328
 
329
330
331
332
...
436
437
438
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439
440
441
...
481
482
483
 
484
485
486
487
488
489
490
491
492
493
494
...
498
499
500
 
 
 
 
 
 
501
502
503
504
505
506
507
508
509
...
568
569
570
571
572
573
574
575
576
0
@@ -229,7 +229,7 @@ error:
0
 }
0
 
0
 
0
-static void on_readable(struct ev_loop *loop, ev_io *watcher, int revents)
0
+static void on_client_readable(struct ev_loop *loop, ev_io *watcher, int revents)
0
 {
0
   ebb_client *client = (ebb_client*)(watcher->data);
0
   
0
@@ -244,8 +244,8 @@ static void on_readable(struct ev_loop *loop, ev_io *watcher, int revents)
0
                      , EBB_BUFFERSIZE - client->read
0
                      , 0
0
                      );
0
- if(read < 0) goto error; /* XXX is this the right action to take for read==0 ? */
0
- if(read == 0) return;
0
+ if(read < 0) goto error;
0
+ if(read == 0) goto error; /* XXX is this the right action to take for read==0 ? */
0
   client->read += read;
0
   ev_timer_again(loop, &client->timeout_watcher);
0
   
0
@@ -326,7 +326,7 @@ static client_init(ebb_server *server, ebb_client *client)
0
   
0
   /* SETUP READ AND TIMEOUT WATCHERS */
0
   client->read_watcher.data = client;
0
- ev_init(&client->read_watcher, on_readable);
0
+ ev_init(&client->read_watcher, on_client_readable);
0
   ev_io_set(&client->read_watcher, client->fd, EV_READ | EV_ERROR);
0
   ev_io_start(server->loop, &client->read_watcher);
0
   
0
@@ -436,21 +436,6 @@ void ebb_server_unlisten(ebb_server *server)
0
   }
0
 }
0
 
0
-
0
-static void server_listen(ebb_server *server)
0
-{
0
- int r = listen(server->fd, EBB_MAX_CLIENTS);
0
- assert(r >= 0);
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
-
0
-
0
 int ebb_server_listen_on_port(ebb_server *server, const int port)
0
 {
0
   int sfd = -1;
0
@@ -496,7 +481,14 @@ int ebb_server_listen_on_port(ebb_server *server, const int port)
0
   server->fd = sfd;
0
   server->port = malloc(sizeof(char)*8); /* for easy access to the port */
0
   sprintf(server->port, "%d", port);
0
- server_listen(server);
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
 error:
0
   if(sfd > 0) close(sfd);
0
@@ -506,12 +498,12 @@ error:
0
 
0
 int ebb_server_listen_on_socket(ebb_server *server, const char *socketpath)
0
 {
0
- int fd = server_socket_unix(socketpath, 0755);
0
- if(fd < 0) return 0;
0
- server->socketpath = strdup(socketpath);
0
- server->fd = fd;
0
- server_listen(server);
0
- return fd;
0
+ // int fd = server_socket_unix(socketpath, 0755);
0
+ // if(fd < 0) return 0;
0
+ // server->socketpath = strdup(socketpath);
0
+ // server->fd = fd;
0
+ // server_listen(server);
0
+ // return fd;
0
 }
0
 
0
 
0
@@ -576,6 +568,9 @@ static void on_client_writable(struct ev_loop *loop, ev_io *watcher, int revents
0
 #endif
0
     ebb_client_close(client);
0
     return;
0
+ } else if(sent == 0) {
0
+ g_message("Sent zero bytes? Closing connection");
0
+ ebb_client_close(client);
0
   }
0
   client->written += sent;
0
   

Comments

    No one has commented yet.