Bonsoir à tous,

Dans le cadre de recherche sur la sécurité informatique je m'essaye à la création d'un "proxy" cependant je rencontre un souci assez étrange.

Tout d'abord une rapide description , je lance un programme sur le port 15000 qui est a l'écoute d'une connexion ; ce port est défini comme celui d'un proxy sous firefox.

Une fois que firefox à ouvert la connexion, le logiciel récupère la requête, extrait le champ "Host : " fait une requête DNS et une fois la connection au serveur HTTP établie il balance la requete, ensuite je récupére la réponse et la rebalance au navigateur.

Dans la théorie c'est very easy mais la pratique est bien plus hard.

Le serveur attend une connexion ( celle de firefox ) dans le main une fois la connexion détectée je crée un nouveau maillon d'une liste chainée et un thread s'occupe du traitement.

Voici un bref apercu du code du thread :

http://pastebin.com/Tq4cY71v

Désolé pour l'indentation du code mais pastebin ne permet pas de spécifier la largeur des tabulations

Sinon pour faire simple, j'arrive a me connecter la requete est bien envoyé, je recois la réponse (je le vois avec Wireshark) cependant select ne me dit jamais que je peux lire sur la socket ; alors que si je force la lecture elle se passe correctement ; mais si je la force tout le temps parfois je bloc sur un recv() ...

voici un schéma simpliste de la chose :

select() -> test socket entrant -> test socket sortant ->passer au maillon suivant.

Je veux bien comprendre qu'au premier select() il ne me dise pas que le socket sortant ai des donnée à lire sachant que la requête est envoyé juste avant mais une fois que tout les maillons on été parcouru et qu'on recommence depuis le début de la liste malheureusement select() ne me renvoie jamais que ma socket sortante et pret pour la lecture.

Auriez vous une idée sur la raison pour laquelle select() ne me donne un résultat faux ?

Merci d'avance.
Bonne soirée.