// call handle, eventually reentrant
if (global_server)
- global_server->handle(1000);
+ global_server->handle(10000);
return ret;
}
CPPUNIT_TEST_SUITE_END();
- pid_t child_pid;
-
public:
void setUp()
void ReentrantServer()
{
- switch(child_pid=fork())
+ switch(fork())
{
case -1:
{
fork();
fork();
- for (int i=0; i < 100; i++)
+ try
{
- socket_client_connection sc("./socket");
- command_client cc(&sc);
-
- result_container rc;
- cc.send_command(new testfunc_cmd("hello"),rc);
-
- string ret=dynamic_cast<testfunc_res*>(rc.get_result())->get_data();
-
- CPPUNIT_ASSERT_EQUAL(string("hello, testfunc() was here"),ret);
+ for (int i=0; i < 100; i++)
+ {
+ socket_client_connection sc("./socket");
+ command_client cc(&sc);
+
+ result_container rc;
+ cc.send_command(new testfunc_cmd("hello"),rc);
+
+ testfunc_res *res = dynamic_cast<testfunc_res*>(rc.get_result());
+ if (res)
+ {
+ string ret = res->get_data();
+ if (ret != "hello, testfunc() was here")
+ std::cout << "ERROR reentrant server testfunc_res failed, res: " << ret << "\n";
+ }
+ else
+ {
+ std::cout << "ERROR result from reentrant server empty\n";
+ }
+ }
+ } catch (exception &e)
+ {
+ cerr << "caught exception: " << e.what() << endl;
}
// don't call atexit and stuff
default:
// parent
{
+ // don't kill us on broken pipe
+ signal(SIGPIPE, SIG_IGN);
+
socket_server ss("./socket");
command_server cs(ss);
global_server=&cs;
// max 10 sec
- long long maxtime=5000000;
+ long long maxtime=1000000;
while(maxtime > 0)
cs.handle(maxtime,&maxtime);
-
+
+ // max 10 sec
+ maxtime=1000000;
+ while(maxtime > 0)
+ cs.handle(maxtime,&maxtime);
+
+ // max 10 sec
+ maxtime=1000000;
+ while(maxtime > 0)
+ cs.handle(maxtime,&maxtime);
+
global_server = NULL;
}