Browse Source

catch session error and exit (fix for trac ticket 11)

git-svn-id: svn://bind10.isc.org/svn/bind10/branches/parkinglot@416 e5f2f494-b856-4b98-b285-d166d9295462
Jelte Jansen 15 years ago
parent
commit
6cd9f05e65
3 changed files with 34 additions and 29 deletions
  1. 1 1
      src/bin/parkinglot/ccsession.cc
  2. 1 1
      src/bin/parkinglot/ccsession.h
  3. 32 27
      src/bin/parkinglot/main.cc

+ 1 - 1
src/bin/parkinglot/ccsession.cc

@@ -75,7 +75,7 @@ CommandSession::CommandSession(std::string module_name,
                                std::string spec_file_name,
                                isc::data::ElementPtr(*config_handler)(isc::data::ElementPtr new_config),
                                isc::data::ElementPtr(*command_handler)(isc::data::ElementPtr command)
-                              ) :
+                              ) throw (isc::cc::SessionError):
     module_name_(module_name),
     session_(isc::cc::Session())
 {

+ 1 - 1
src/bin/parkinglot/ccsession.h

@@ -36,7 +36,7 @@ public:
     CommandSession(std::string module_name, std::string spec_file_name,
                    isc::data::ElementPtr(*config_handler)(isc::data::ElementPtr new_config) = NULL,
                    isc::data::ElementPtr(*command_handler)(isc::data::ElementPtr command) = NULL
-                  );
+                  ) throw (isc::cc::SessionError);
     int getSocket();
 
     /**

+ 32 - 27
src/bin/parkinglot/main.cc

@@ -133,35 +133,40 @@ main(int argc, char* argv[]) {
     //plot = ParkingLot(port);
 
     // initialize command channel
-    CommandSession cs = CommandSession(PROGRAM, SPECFILE, my_config_handler, my_command_handler);
+    try {
+        CommandSession cs = CommandSession(PROGRAM, SPECFILE, my_config_handler, my_command_handler);
     
-    // main server loop
-    fd_set fds;
-    int ps = plot.getSocket();
-    int ss = cs.getSocket();
-    int nfds = max(ps, ss) + 1;
-    int counter = 0;
-
-    cout << "Server started." << endl;
-    while (true) {
-        FD_ZERO(&fds);
-        FD_SET(ps, &fds);
-        FD_SET(ss, &fds);
-
-        int n = select(nfds, &fds, NULL, NULL, NULL);
-        if (n < 0)
-            throw FatalError("select error");
-
-        if (FD_ISSET(ps, &fds)) {
-            ++counter;
-            plot.processMessage();
-        }
-
-        /* isset not really necessary, but keep it for now */
-        if (FD_ISSET(ss, &fds)) {
-            cs.check_command();
+        // main server loop
+        fd_set fds;
+        int ps = plot.getSocket();
+        int ss = cs.getSocket();
+        int nfds = max(ps, ss) + 1;
+        int counter = 0;
+    
+        cout << "Server started." << endl;
+        while (true) {
+            FD_ZERO(&fds);
+            FD_SET(ps, &fds);
+            FD_SET(ss, &fds);
+    
+            int n = select(nfds, &fds, NULL, NULL, NULL);
+            if (n < 0)
+                throw FatalError("select error");
+    
+            if (FD_ISSET(ps, &fds)) {
+                ++counter;
+                plot.processMessage();
+            }
+    
+            /* isset not really necessary, but keep it for now */
+            if (FD_ISSET(ss, &fds)) {
+                cs.check_command();
+            }
         }
+    } catch (isc::cc::SessionError se) {
+        cout << se.what() << endl;
+        exit(1);
     }
-
+    
     return (0);
 }