Bonsoir,
J'obtiens l' erreur : Address already in use en tentant de faire un bind() avec une nouvelle socket
Quelqu'un pourrait m'expliquer pourquoi ?
PS : la socket utilisée précédemment à été fermée close() et deliée unlink()
merci d'avance :)
Version imprimable
Bonsoir,
J'obtiens l' erreur : Address already in use en tentant de faire un bind() avec une nouvelle socket
Quelqu'un pourrait m'expliquer pourquoi ?
PS : la socket utilisée précédemment à été fermée close() et deliée unlink()
merci d'avance :)
est ce que tu n'utiliserais pas un port standard deja ouvert ?
J'utilise le port 5000
Ce qui est bizarre, c'est que je me connecte une premiere fois normalement sans erreurs.
Est ce qu'il y aurait autre chose à faire pour casser le lien entre la socket et le port ?
est ce que tu fais une appli multi-threadé ?
euh ...
Voilà ce que j'essaie de faire :
un processus server tourne en boucle avec while()
un socket est créé et lié au port 5000 pour écouter les connections sur ce même port
un client se connecte au port 5000 et envoi un message texte via le socket,
le server affiche le message reçu et renvoi une reponse que le client reçoit et affiche lui aussi.
le server et le client ferme ensuite leur socket chacun de leur côté.
Jusqu'ici tout va bien
le server delie ensuite le socket du port avec unlink()
A ce nivau ci , je ne sais pas si la liaison a bien été cassée ...
le programme retourne au début de la boucle,
un nouveau socket est créé (puisque le précédent à été fermé)
ce nouveau socket est lié avec bind() et c'est à ce moment que je reçoit l'erreur : ADDRESS ALREADY IN USE
:?
Il existe accept qui je pense me permet d'ouvrir plusieurs connection en fonction des demandes affluantes ... (je dois encore me renseigner sur le sujet)
euh tu fais le bind dans la boucle ?
oui , en fait ...
Apparemment c'est pas comme cela que cela fonctionne :mouarf:
La création et le bind doivent se faire en dehors de la boucle donc,
ensuite viendrait la boucle dans laquelle on place l'appel accept() et tout le reste ?
Génial !
je viens d'essayer et je parviens à me connecter plus d'une fois sans erreur ! :D
merci beaucoup !
to be continued ...
Ouf, c'est ce que j'ai indiqué ici :Citation:
Envoyé par horkets
http://emmanuel-delahaye.developpez.com/reseaux.htm
Ah si j'avais su j'aurais visité ce tutos là depuis longtemps ...
en tout les cas, grace au nombreux plantages et aux nombreuses recherches effectuées, cela m'a permis de comprendre pas mal de chose (en sachant qu'il y a encore du boulot...)
Ceci dit, une question persiste : On peut ecrire dans un socket avec write() et envoyer des données avec recv()
Quelle est la différence
qu'est ce qui est le plus efficace ?
merci d'avance :)
- On n'envoie pas des données avec recv(), mais avec send().
- send() est plus portable. Sur un système où les sockets ne sont pas des descripteurs (au hasard: Windows), write() ne marchera pas.
...... :aie:Citation:
On n'envoie pas des données avec recv(), mais avec send().
C'est lundi pour tout le monde ...