Socket avec Time out sous windows [Résolu]

Signaler
Messages postés
20
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Messages postés
20
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010
-
Bonjour,
J'ai un programme qui intercept les paquets sur une ip(de l'une de mes cartes réseaux) sous windows.
SOCKET sock;
    if((sock socket(AF_INET, SOCK_RAW, IPPROTO_IP)) INVALID_SOCKET)
    {
        printf("\n[!]Impossible de creer le socket.\n--- Erreur avec    socket() : %d\n\n", WSAGetLastError());
        system("pause");
        return 0;
    }

je voulais lorsque je reçois rien au bout de quelque seconde mon programme se ferme, j'ai ajouter un time out
 struct timeval tv;
     tv.tv_sec = 1;
     tv.tv_usec =500;

 if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,(char *)&tv, sizeof(tv))!=0)
///
///
nbrepacket=recv(sock, packet, sizeof(packet), 0);
if(nbrepacket<0)
{
   ///0 paquet reçu
   //Traitement avant fermeture
   exit(-1);
}

mais ça foncionne pas, en faite lorsque je change mon adresse Ip le programme doit se fermer puisque il recoit plus de paquet!
Help :(

2 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
Quand je regarde dans MSDN la fonction setsockopt il y a d'écrit :
the recv function returns WSAETIMEDOUT

WSAETIMEDOUT = 10060, donc ton test
if(nbrepacket<0)
n'est pas correct.
Messages postés
20
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
23 mars 2010

Merci pour votre réponse, j'ai fais des modif sur mon code, mais aparament j'ai pas compris le fonctionnement du
recv(..)
avec un time out au début , et oui
if(nbrepacket<0)
nbrepacket retourn -1 si pas reception de paquet au bout de 1s 500ms(nbrepacket c'est pas vraiment nombre de paquets ^^)...