yartempion a écrit :
Elle affihe un message avec printf().J'ai resolu le pb de maniere suivante mais qui me parait peut eleguante:
Code :
- sigjmp_buf reprise;
- TIMEOUT()
- {
- printf("\nDelai d'attente depasse 30s d'ecoule" );
- siglongjmp(reprise,1);
- }
- main(argc,argv)
- {
- struct sigaction act_time;
- act_time.sa_handler=TIMEOUT;
- act_time.sa_flags=0;
- deblocage=sigaction(SIGALRM,&act_time,0);
- if(sigsetjmp(reprise,1)==0)
- {
- while(connection!=0||var_etat==10)
- {
- connection=connect(socket1,(struct sockaddr*)&addr_distant,sizeof(addr_distant));
- if(errno!=245&&errno!=244)
- printf("\nvaleur de retour apres connect %d valeur de errno %s %d de var_etat=%d",connection,strerror(errno),errno,var_etat);
- if(errno==234)
|
{
var_etat=alarm(0);
printf("\nconnection OK=%d valeur du timeout %d",connection=0,ETIMEDOUT);
}
}/*fin de tentative de Connection au point distant*/
}/* fin du sigsetjmp*/
}
Comment intercepter SIGALMR, lancer le gestionnaire de signaux mis en place et l'executer puis revenir dans le prog principal.
|