Made these examples more robust. Now if the server's start() function throws an

exception it will be printed right away rather than after the user hits
the enter key.  I also removed the global server objects since that was
pretty sketchy too.

--HG--
extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%403713
This commit is contained in:
Davis King 2010-07-02 00:26:59 +00:00
parent b9f602e1b6
commit 991e8946b1
3 changed files with 76 additions and 37 deletions

View File

@ -13,6 +13,7 @@
#include <sstream>
#include <string>
#include "dlib/server.h"
#include "dlib/ref.h" // for ref()
using namespace dlib;
using namespace std;
@ -91,28 +92,42 @@ class web_server : public server::http_1a_c
};
// create an instance of our web server
web_server our_web_server;
void thread()
void thread(web_server& the_server)
{
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down which will in turn cause
// our_web_server.start() to unblock and thus the main() function will terminate.
our_web_server.clear();
try
{
// Start the server. start() blocks until the server is shutdown
// by a call to clear()
the_server.start();
}
catch (socket_error& e)
{
cout << "Socket error while starting server: " << e.what() << endl;
}
catch (exception& e)
{
cout << "Error while starting server: " << e.what() << endl;
}
}
int main()
{
try
{
// create a thread that will listen for the user to end this program
thread_function t(thread);
// create an instance of our web server
web_server our_web_server;
// make it listen on port 5000
our_web_server.set_listening_port(5000);
our_web_server.start();
// create a thread that will start the server. The ref() here allows us to pass
// our_web_server into the threaded function by reference.
thread_function t(thread, ref(our_web_server));
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down
our_web_server.clear();
}
catch (exception& e)
{

View File

@ -14,6 +14,7 @@
#include "dlib/sockets.h"
#include "dlib/server.h"
#include "dlib/ref.h" // for ref()
#include <iostream>
using namespace dlib;
@ -41,34 +42,44 @@ class serv : public server::kernel_1a_c
};
serv our_server;
void thread()
void thread(serv& our_server)
{
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down which will in turn cause
// our_server.start() to unblock and thus the main() function will terminate.
our_server.clear();
try
{
// Start the server. start() blocks until the server is shutdown
// by a call to clear()
our_server.start();
}
catch (socket_error& e)
{
cout << "Socket error while starting server: " << e.what() << endl;
}
catch (exception& e)
{
cout << "Error while starting server: " << e.what() << endl;
}
}
int main()
{
try
{
// create a thread that will listen for the user to end this program
thread_function t(thread);
serv our_server;
// set up the server object we have made
our_server.set_listening_port(1234);
our_server.set_max_connections(1000);
// start the server
our_server.start();
// create a thread that will start the server. The ref() here allows us to pass
// our_server into the threaded function by reference.
thread_function t(thread, ref(our_server));
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down
our_server.clear();
}
catch (exception& e)
{

View File

@ -25,6 +25,7 @@
#include "dlib/sockets.h"
#include "dlib/server.h"
#include "dlib/sockstreambuf.h"
#include "dlib/ref.h"
#include <iostream>
using namespace dlib;
@ -67,32 +68,44 @@ class serv : public server::kernel_1a_c
};
serv our_server;
void thread()
void thread(serv& our_server)
{
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down which will in turn cause
// our_server.start() to unblock and thus the main() function will terminate.
our_server.clear();
try
{
// Start the server. start() blocks until the server is shutdown
// by a call to clear()
our_server.start();
}
catch (socket_error& e)
{
cout << "Socket error while starting server: " << e.what() << endl;
}
catch (exception& e)
{
cout << "Error while starting server: " << e.what() << endl;
}
}
int main()
{
try
{
// create a thread that will listen for the user to end this program
thread_function t(thread);
serv our_server;
// set up the server object we have made
our_server.set_listening_port(1234);
our_server.set_max_connections(1000);
// start the server
our_server.start();
// create a thread that will start the server. The ref() here allows us to pass
// our_server into the threaded function by reference.
thread_function t(thread, ref(our_server));
cout << "Press enter to end this program" << endl;
cin.get();
// this will cause the server to shut down
our_server.clear();
}
catch (exception& e)
{