blocage de pcap et de plusieurs entrées / sorties `select`

Je souhaite utiliser pcap pour capturer des paquets, puis les envoyer à un autre hôte. Mes extraits de code source sont les suivants:

for(;;){ pcap_packet = pcap_next(pcap_handler, &pcap_header); if(pcap_packet !=NULL) printf("capture a packet with length of %d\n", pcap_header.len); // send the packet as payload to the sender, excluding the Ethernet Header n = send(sd_proxy, pcap_packet+ETHERNET_HDR_LEN, pcap_header.len-ETHERNET_HDR_LEN, 0); if(n<0){ shutdown(connfd, SHUT_RDWR); close(connfd); break; } new } 

Donc, fondamentalement, je veux que le programme soit bloqué par pcap_next, une fois que la socket sd_proxy établit une connexion TCP avec l’autre hôte, si l’autre hôte initie une fermeture TCP active, je souhaite détecter cette fermeture active. Idéalement, je devrais utiliser un select et un n=recv(rd_fd, ...) si l’autre hôte initie une fermeture active, select remarquera qu’il y a quelque chose avec rd_fd et ensuite je vois si ‘n = 0’ ou pas. mais avec pcap, select ne peut pas coopérer avec pcap

alors comment finir ma tâche? Merci!

    select ne peut pas coopérer avec pcap

    Pourquoi pas? Avez-vous essayé d’utiliser pcap_get_selectable_fd() sur pcap_handler et d’append le descripteur de fichier résultant au descripteur de fichier défini dans votre appel select() ?

    Vous travaillez sur Linux, cela devrait donc fonctionner.

    (Si vous utilisiez un système utilisant BPF, tel que * BSD ou OS X, vous pourriez avoir des problèmes avec ceci, du moins avec les anciennes versions de ces systèmes d’exploitation; plusieurs * BSD ont eu leurs bugs select-with-BPF corrigés pour un peu; sous OS X, je l’ai corrigé dans Lion, donc il pourrait avoir des problèmes sur Snow Leopard et plus tôt.)