Bonjour à tous,
Actuelement, un camarade et moi meme dévelopont pour un projet tutorer, une API de calcul distribuer en C. Cette dernière utilise donc les sockets C ainsi que la fonction select(). Or nous aimerions migrer select() vers poll() (pour eviter la limite de FD_SETSIZE). Seulement nous venons de remarquer que nous avons aucun tests dans de notre code existant dans le cas d'exception socket detecter par select(). Or nous voudrions affectuer la migration après avoir testé cette fine mais importante partie du code.
Voici le prototype de select() sur lequel je base ma question:
Ainsi nous utilisons la totalité des parametres de select(), dont <exceptfds> pour pouvoir tracker les sockets qui auraient eu des problèmes. Mais notre projet étant encore dans sa genèse (5 semaines developement en parrallel des cours et autre projets, 10000 lignes de code), nous n'avons pas encore assister à une exception socket. Donc nous voudrions les provoquer dans nos tests pour etre sur d'atteindre 100% des assertions présentes dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
Pour tester nottre code des differents protocols déjà implementé, nous avons pour abitude d'établir dans un même processus une connection TCP vers lui meme, avec souvent un multi-threading.
- Creations d'un socket d'ecoute server sur le port 0 pour eviter les batailles de ports lors du parralellisme des tests (`make tests -j8`)
- Recuperations du port d'ecoute affecté par l'OS
- Ouverture de connection TCP sur notre socket server (connect(), accept() & cie ...)
- Fermeture du socket d'ecoute server
- Test de notre protocol souvent en multi-thread (plus facile à debuguer)
Donc l'idée serait qu'une foit la connection TCP établie, faire une manipulation m'étant encore inconnue sur un socket TCP pour que le socket TCP `d'en face` ressoit une exception, detecté par le select() afin de pouvoir tester le code associé a cette evenement.
La question est: Connaissez vous cette misterieuse manipulation qui puisse etre multi-platforme (OSX et Linux au moins) et permetant de generer l'exception sur le socket "d'en face" ?
Merci beaucoup de votre lecture (malgrer mon orthographe je le sais) ainsi que de vos futur réponses éventuelles.
Partager