2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 22:15:23 +00:00

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
This commit is contained in:
Jelte Jansen
2009-12-30 09:45:42 +00:00
parent 579aae2cc8
commit 6cd9f05e65
3 changed files with 34 additions and 29 deletions

View File

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

View File

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

View File

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