programmation socket. fonction accept() retourne 0 - C++ - Programmation
Marsh Posté le 11-04-2006 à 09:06:58
normalement, si accept() te renvoie 0, c'est que la socket a été ouverte sur le file descriptor 0. C'est pas une erreur (c'est juste surprenant étant donné que le fd 0 correspond normalement à l'entrée standard). Je suppose que tu as fermé stdin avant ?
Marsh Posté le 11-04-2006 à 10:58:23
franceso a écrit : normalement, si accept() te renvoie 0, c'est que la socket a été ouverte sur le file descriptor 0. C'est pas une erreur (c'est juste surprenant étant donné que le fd 0 correspond normalement à l'entrée standard) |
Merci pour ta réponse,
Ca me semble bizarre aussi que accept() retourne 0 qui lui correspond a STDIN.
franceso a écrit : Je suppose que tu as fermé stdin avant ? |
Pourquoi dois-je fermer stdin?logiquement on est pas censé s'en occuper!!
En plus les socket que je gére sont dans le domaine AF_INET.
Marsh Posté le 11-04-2006 à 11:11:50
Citation : Pourquoi dois-je fermer stdin?logiquement on est pas censé s'en occuper!! |
Effectivement, tu n'as normalement pas à t'occuper de stdin. Mais je ne comprends pas comment accept peut te renvoyer un 0 si le fd 0 est encore ouvert.
Marsh Posté le 11-04-2006 à 11:24:31
franceso a écrit :
Effectivement, tu n'as normalement pas à t'occuper de stdin. Mais je ne comprends pas comment accept peut te renvoyer un 0 si le fd 0 est encore ouvert. |
C'est ce qui me prend vraiment la tete depuis quelques jours c'est que le resultat obtenu par accept() n'est pas du tout logique, surtout qu'au cours de mes tests j'ai remarqué que la fonction accept() n'est lancé qu'aprés la demande connect() de l'autre PC ce qui est tout a fait correct, donc je vois vraiment pas ce que viens STDIN se méler dans tout ca
Marsh Posté le 11-04-2006 à 12:13:12
tu peux envoyer ton code ? il y a peut-être une erreur quelque part avant...
Marsh Posté le 11-04-2006 à 18:43:31
Je vais essayer d'indenter et de commenter mon code pour qu'il soit plus lisible.Je le post dés que possible
Marsh Posté le 12-04-2006 à 00:05:00
Il est difficile de montrer tous le code car il y a plusieurs class c assez long mais voila les parties qui posent probleme.
1ere partie:
Code :
|
2éme partie et c'est la que ca coince:
Code :
|
Je recapitule: la 1ere partie est censé envoyé une requete connect() à un hote.2éme partie censé accepter ce meme connect() et renvoyé un descripteur de fichier mais le malheur c'est que ca me renvoie 0 qui est STDIN.
Bon j'espere que ca vous dit quelque chose car la c'est pas evident j'avoue...
Marsh Posté le 19-07-2006 à 11:47:36
Il manquerait pas tout simplement le listen(socket,nbSocketAEcouter) ?
Je sais ça date d'avril mais bon ...
Marsh Posté le 11-04-2006 à 01:51:44
Je suis en train de programmer une bibliothéque de communication reseau et cela fait plus d'une semaine que j'essaie de voir d'ou viens le probléme, mais je n'arrive pas!!! je me tourne alors vers vous en esperant que vous ayez deja rencontré ce probléme ou que vous etes bien doués en programmation socket.
Mon Probléme:
dans une communication en TCP entre deux ordinateurs l'un envoie un connect() qui se passe trés bien mais le probléme c'est que l'autre ordinateur à l'autre bout quand il accept la connexion avec la fonction accept() il me retourne 0 alors qu'il est censé renvoyé une socket pour communiquer avec l'autre ordi.
Man 2 socket: " L'appel système accept extrait la première connexion de la
file des connexions en attente, crée une nouvelle socket
avec essentiellement les mêmes propriétés que sock et
alloue un nouveau descripteur de fichier pour cette
socket."
Voila Mon probléme en gros accept() renvoie 0 alors qu il ne doit pas Si quelqun a la reponse il sera mon sauveur...
PS: pour ne pas encombrer mon message je n'ai pas ajouter le code, s'il ya besoin je suis pret a le faire.