summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-12-18 17:46:59 +0000
committerhaller2005-12-18 17:46:59 +0000
commit777c03e4048e20f3d66bc8d72932658fc9dc08cc (patch)
treee5defe31fd2b650e3b1b13260f56413a11a1d834
parentad8b9998a75c09dcfae0ac77bfd244e7ae58da1f (diff)
* Ajout du drapeau de compilation -W (oublie dans le Makefile.am)
* Passage de test_socket des threads vers les forks (autres tests comming soon)
-rw-r--r--i/simulotron/src/Makefile.am2
-rw-r--r--i/simulotron/src/socket/Makefile.incl.am2
-rw-r--r--i/simulotron/src/socket/test_socket.cc80
3 files changed, 44 insertions, 40 deletions
diff --git a/i/simulotron/src/Makefile.am b/i/simulotron/src/Makefile.am
index 7fe98a5..ce848fe 100644
--- a/i/simulotron/src/Makefile.am
+++ b/i/simulotron/src/Makefile.am
@@ -10,7 +10,7 @@ simulotron_SOURCES = main.cc \
$(gs_message_S) \
$(gs_transmitter_S)
-AM_CXXFLAGS = -g -Wall -fmessage-length=0
+AM_CXXFLAGS = -g -Wall -W -fmessage-length=0
simulotron_LDADD =
INCLUDES = -I$(srcdir)
diff --git a/i/simulotron/src/socket/Makefile.incl.am b/i/simulotron/src/socket/Makefile.incl.am
index cc27283..57219f0 100644
--- a/i/simulotron/src/socket/Makefile.incl.am
+++ b/i/simulotron/src/socket/Makefile.incl.am
@@ -5,5 +5,3 @@ socket_S = socket/socket_server.cc socket/socket_server.hh \
check_PROGRAMS += test_socket
test_socket_SOURCES = socket/test_socket.cc $(socket_S)
-test_socket_CXXFLAGS = -pthread -g -W -Wall
-test_socket_LDADD = -lpthread
diff --git a/i/simulotron/src/socket/test_socket.cc b/i/simulotron/src/socket/test_socket.cc
index a2c729e..47a8282 100644
--- a/i/simulotron/src/socket/test_socket.cc
+++ b/i/simulotron/src/socket/test_socket.cc
@@ -28,6 +28,7 @@
#include "utils/errno_exception.hh"
#include <iostream>
+#include <sys/wait.h>
// Adress useful
Address adr;
@@ -37,47 +38,49 @@ const std::string strDepart = "J'aime la prog système.";
std::string strDest;
const char a = 'f';
char b;
-//threads
-pthread_t threadId[2];
-void * retour;
-int stateTh[2];
-void * testSockServ(void * CaSertARien);
-void * testSockClient(void * CaSertARien);
+int testSockServ(SocketServer & sockServ);
+int testSockClient(int pauseMode);
int main(void)
{
- int ret;
- ret = pthread_create(& threadId[0], NULL, testSockServ, NULL);
- if(ret != 0)
+ pid_t pid;
+ int resultServer, resultClient;
+ // Pause mode pour débugger le fork
+ int pauseMode;
+
+ // Création de la socket serveur;
+ SocketServer sockServ(Address(4242));
+ // Mise en écoute du socket serveur
+ sockServ.listen(12);
+
+ // on fork pour traiter le client et le serveur
+ pid = fork();
+ if(pid == 0) //Processus fils
+ testSockClient(pauseMode);
+ else //Processus parent
+ resultServer = testSockServ(sockServ);
+
+ // On analyse les résultats
+ wait(&resultClient);
+ if (!(WIFEXITED(resultClient) && WEXITSTATUS(resultClient) == 0))
{
- std::cout << "CHIER: Echec thread serveur" << std::endl;
- return EXIT_FAILURE;
+ std::cerr << "ECHEC: Problème coté client" << std::endl;
+ exit (-1);
}
- ret = pthread_create(& threadId[1], NULL, testSockClient, NULL);
- if(ret != 0)
+ if (resultServer != 0)
{
- std::cout << "CHIER: Echec thread client" << std::endl;
- return EXIT_FAILURE;
+ std::cerr << "ECHEC: Problème coté serveur" << std::endl;
+ exit (-1);
}
- pthread_join(threadId[0], &retour);
- stateTh[0] = (int) retour;
- pthread_join(threadId[1], &retour);
- stateTh[1] = (int) retour;
- if(stateTh[0] == 0 && stateTh[1] == 0)
- return 0;
- else
- return 1;
+
+ return 0;
}
-void * testSockServ(void * CaSertARien)
+int testSockServ(SocketServer & sockServ)
{
try
{
- // Création de la socket serveur;
- SocketServer sockServ(Address(4242));
- // Mise en écoute du socket serveur
- sockServ.listen(12);
// Acceptation d'une connection
SocketClient sockFork(sockServ);
// Reception d'un message
@@ -87,7 +90,7 @@ void * testSockServ(void * CaSertARien)
std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du client au serveur!!" << std::endl;
std::cout << "Le message d'origine: " << strDepart << std::endl;
std::cout << "Message reçu: " << std::endl;
- return (void *) 1;
+ return 1;
}
// Ecriture du serveur au client
sockFork.write(strDepart);
@@ -98,7 +101,7 @@ void * testSockServ(void * CaSertARien)
std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du client au serveur!!" << std::endl;
std::cout << "Le char d'origine: " << a << std::endl;
std::cout << "Le char d'arrivé: " << b << std::endl;
- return (void *) 1;
+ return 1;
}
// Ecriture du serveur vers le client
sockFork.putChar(a);
@@ -107,13 +110,16 @@ void * testSockServ(void * CaSertARien)
{
std::cout << "CHIER !! Une exception a été lancé coté serveur!!" << std::endl;
std::cout << chier.what() << std::endl;
- return (void *) 1;
+ return 1;
}
- return (void *) 0;
+ return 0;
}
-void * testSockClient(void * CaSertARien)
+int testSockClient(int pauseMode)
{
+ // Chance pour debbuger le fork
+ while(pauseMode)
+ sleep(10);
try
{
// Création de la socket client
@@ -129,7 +135,7 @@ void * testSockClient(void * CaSertARien)
std::cout << "CHIER!! Le message d'origine est altéré en ecrivant du serveur au client!!" << std::endl;
std::cout << "Le message d'origine: " << strDepart << std::endl;
std::cout << "Message reçu: " << std::endl;
- return (void *) 1;
+ exit (1);
}
// Ecriture d'un char du client au serveur
sockClient.putChar(a);
@@ -140,14 +146,14 @@ void * testSockClient(void * CaSertARien)
std::cout << "CHIER!! Le char d'origine est altéré en ecrivant du serveur au client!!" << std::endl;
std::cout << "Le char d'origine: " << a << std::endl;
std::cout << "Le char d'arrivé: " << b << std::endl;
- return (void *) 1;
+ exit (1);
}
}
catch(errno_exception & chier)
{
std::cout << "CHIER !! Une exception a été lancé coté client!!" << std::endl;
std::cout << chier.what() << std::endl;
- return (void *) 1;
+ exit (1);
}
- return (void *) 0;
+ exit (0);
}