| coldfireDe lumière et d'obscurité | Hop
 Je cherche à faire ça:
 
 un 1er thread envoie des messages dans une file de messages. Il envoie cette structure:
 
 struct trigctx {
 struct libnet_ip_hdr ip ;
 char lpfound [1024] ;
 time_t when ;
 }
 
 Le 2 thread regarde régulièrement dans la file de messages s'il y a un message, et le décortique pour voir s'il correspond à ce dont il a besoin. Il regarde avec IPC_NOWAIT en flag pour pas attendre qu'un message soit là.
 Pb: un seg fault.
 
 
 | Code : 
 Envoi du message:déclaré:struct trigctx {   struct libnet_ip_hdr ip ;   char lpfound [1024] ;   time_t when ;} ;struct trigctx * context ;Puis, pour l'envoi du message:if (idmq = msgget (MSGQUEUE, 0) == -1)   perror ("Cannot link to message queue\n" ) ;else{   context -> ip = (struct libnet_ip_hdr) *ip ;   context -> when = time(NULL) ;   strcpy (context -> lpfound, obuf) ;  // obuf est une chaine, évidemment
   msgsnd (idmq, (void *) context, sizeof (context), IPC_NOWAIT) ;}
 | 
 
 | Code : 
 Lecture du message, dans l'autre thread. Même déclarations.if (msgrcv (idmq, (struct trigctx *) context, 1000, 0, IPC_NOWAIT) == -1)   perror ("Cannot retreive info" ) ;}else{   if ((ctx->ip_src == context->ip.ip_src.s_addr) && (ctx -> ip_dst == context->ip.ip_dst.s_addr) && ((context -> ip.ip_p == ctx -> p_src) || (context ->ip.ip_p == ctx->p_dst)) && (time(NULL) - context->when < 5))   {      strcpy (ctx->user, context->lpfound) ;      printf ("lpfound: %s\n", context->lpfound) ;   }}
 | 
 
 ctx est un struct ctx_t *, et cette structure contient entre autre:
 
 u_long ip_src ; // ip source
 u_long ip_dst ; // ip dest
 u_short p_src ; // port source
 u_short p_dst ; // port dest
 char user [STRING_NAME_SIZE+1] ; // nom de l'utilisateur
 
 Une idée?
   Message édité par coldfire le 24-07-2002 à 15:59:15
 |