Ci dessous ma fonction work qui pourra certainement vous aider à comprendre mon pb...
static int Work(int argc, char **argv)
{
char host[1024];
char port[1024];
char outfile[1024];
int pid[50] ;
int nbCreatedProc = 0 ;
int pidScan = 0 ;
int flags;
int fd ;
SOCKET sock_in ;
memset(host,0,1024);strcpy(host, argv[1]);
memset(port,0,1024);strcpy(port, argv[2]);
if (argc>=4)
tester_trace=atoi(argv[3]);
while (1) {
pid[nbCreatedProc] = fork();
if (pid[nbCreatedProc] == -1) { /* Error */
fprintf(stdout, "proc creation error");
return -1 ;
}
else if (pid[nbCreatedProc]) { /* This process */
fprintf(stdout, "created proc : %d\n", pid[nbCreatedProc]);
nbCreatedProc ++ ;
if (nbCreatedProc == 50){
fprintf(stdout, "50 process created... sleep 2\n");
sleep(2);
for (pidScan=0; pidScan < 50 ; pidScan++){
kill(pid[pidScan], SIGKILL);
fprintf(stdout, "killed proc : %d\n", pid[pidScan]);
nbCreatedProc -- ;
}
}
} else { /* Child */
/*
* Open standard streams.
*/
memset(outfile, 0, 1024);
sprintf(outfile,"./%d_out.txt",getpid());
open("/dev/null", O_RDONLY);
flags = (O_CREAT | O_WRONLY);
flags |= (FLAGS & PROC_TRUNCATE_STDOUT) ? O_TRUNC : O_APPEND;
fd=open(outfile, flags, 0666);
if (fd >= 0)
/*redefine stdout*/
dup2(fd,1);
if (client (host, port) < 0) {
fprintf(stdout, "[%d] CONNECTION FAILED", getpid());
return -1 ;
}
else
sleep(10);
}
}
# malpropre !
Posté par daggett . Évalué à 3.
- envoyer un signal "STOP" au lieu de "KILL" à tes process, pour arreter le flux "applicatif"; la connection TCP restera gérée au niveau noyau cependant, bien que silencieuse.
- Debrancher la prise réseau à la main pour simuler le crash de ton client vis-à-vis du serveur distant
- ou alors descendre l'interface réseau pour interdire au noyau d'émettre, ça devrait revenir au même.
- Si tu travailles via réseau, ça peut être embettant :) donc il te faudra créer une deuxieme interface réseau virtuelle du style eth0:0 (dans un network/routage qui soit bien distinct, pour qu'elle ne puisse pas servir de route de secour aux connections de ton appli de test)
- Si tu n'as besoin que de faire des "connect" TCP qui ne soient pas suivis d'une déconnexion, et qu'il n'y a pas de données à réellement envoyer, tu peux tenter d'apprendre à forger des paquets TCP au niveau utilisateur au lieu de laisser faire le kernel. Mais ça c'est si tu es desespéré.
[^] # Re: malpropre !
Posté par Obsidian . Évalué à 4.
[^] # Re: malpropre !
Posté par str000mff . Évalué à 1.
[^] # Re: malpropre !
Posté par Obsidian . Évalué à 2.
man page powah ! :-)
[^] # Re: malpropre !
Posté par str000mff . Évalué à 1.
[^] # Re: malpropre !
Posté par str000mff . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.