Ah... J'ai peut etre une piste...
Mon bind me retourne -1. Par contre accept me retourne bien 0 (très logique, lol!).
Bon, maintenant reste à comprendre pourquoi bind me retourne -1...
Onet
Ps: merci de ta patience, lol :p)
Ah... J'ai peut etre une piste...
Mon bind me retourne -1. Par contre accept me retourne bien 0 (très logique, lol!).
Bon, maintenant reste à comprendre pourquoi bind me retourne -1...
Onet
Ps: merci de ta patience, lol :p)
---
Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com
Purée...
Quel boulet je fais aprfois... J'ai mis l'ip distant quand je crée le serveur pour recevoir (avec bind), au lieu de mettre mon ip a moi... Boulet, boulet et re boulet...
Désolé, et encore merci...
A bientot pour la suite, lol :p
Onet
---
Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com
C'est pour ça que je pense que les noms serv/clts prêtent à confusion. En fait tu as besoin de deux "préfixes" : local/remote pour distinguer les données (addr, etc.) de ton appli de celle distante et ensuite soit tu gardes serv/clt soit requete/reponse pour distinguer tes deux connexions. Ce qui te fait au final 4 jeux de données :
local_requete_addresse (fait le connect et le send) <-- communique avec --> remote_requete_addresse
local_reponse_addresse (fait le listen et le recv) <-- communique avec --> remote_reponse_addresse
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Yep,
Effectivement. Je vais regarder cela de plus pret pour la version finale.
En tout cas merci pour le coup de main. par contre, je pensais pas qu'un listen() pouvait renvoyé un 0 si le bind avait renvoyé un -1...
Onet
---
Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com
En fait, dans beaucoup d'implémentations, la socket est rattachée à des valeurs par défaut au moment du listen si aucun bind n'a été fait. Tu peux les obtenir par la suite avec getsockname. A quoi ça peut servir ? A être sur que tu vas prendre un couple adresse/port disponible et que ton bind ne va pas échouer parce qu'une autre appli utilise le même port.
Exemple de scénario :
ouverture d'une socket d'envoi : s1
ouverture d'une socket de réception : s2
s2 <- non bloquante
s2 <- listen
récupération du 'nom' de la socket avec getsockname(s2)
envoi des infos de s2 au distant par s1
select sur s2 pour attendre la connexion
...
le distant peut maintenant se connecter à s2.
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Oki,
Intéressant! merci
Si tu repasse par la (si j'abuse pas :p) comment je rends mon serveur non bloquant, avec ta solution (enfin, la mienne, dans mon cas :p)?
Onet
---
Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com
Sous windows, ce serait ioctlsocket + FIONBIO.
Sous Linux, je ne sais pas. Peut-être faut-il regarder du côté de fcntl ou ioctl ?
Sinon, as-tu envisagé d'utiliser Boost.Asio qui t'abstrait de toutes ces petits détails ?
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Ok, merci de l'info.
Oui, j'ai regardé pour Boost, mais je voulais déja comprendre comment ca fonctionnait avant d'abstraire tout cela
Onet
---
Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com
ioctl + FIONBO sous Unixoide (renvoie -1, errno=EAGAIN si il n'y a rien à lire / écrire).
Sinon tu peux utiliser le mécanisme select (ou autre mécanisme spécialisé kevent / epoll).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager