Précédent   Forum des professionnels en informatique > Systèmes > Linux > Réseau
Réseau Vos questions autour des réseaux et télécoms sous Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/10/2006, 18h12   #1
Membre régulier
 
Avatar de horkets
 
Inscription : juillet 2005
Messages : 324
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 324
Points : 93
Points : 93
Par défaut Address already in use

Bonjour,

Je reçoit le message ADRESS ALREADY IN USE lorsque j'utilise l'appel bind() ...
Comment dois je couper cette liaison pour pouvoir réattacher un socket à un même port ?

merci d'avance
horkets est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2006, 18h13   #2
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
ben faut tuer le process qui occupe le port
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2006, 18h29   #3
Membre régulier
 
Avatar de horkets
 
Inscription : juillet 2005
Messages : 324
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 324
Points : 93
Points : 93
Comment puis je y arriver ?
devrais je recupérer le pid et mettre fin au process de la sorte ?
Est ce que cela se fait du client ou du server ?

merci
horkets est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2006, 18h50   #4
Membre régulier
 
Inscription : janvier 2004
Messages : 133
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 133
Points : 97
Points : 97
Salut,

Si tu écris un serveur qui rempli un service "bien connu", tu peux t'accaparer le port correspondant (80, 21 ...) sinon, tu ne pourras pas toujours tuer le processus qui emploi le port que tu veux. Si le processus est utile ou ne t'appartient pas tu fais comment ?

Une autre astuce, tu passes le port en ligne de commande et tu réessayes jusqu'à trouver un libre.

Et voilà comment moi je procède :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
  server_addr.sin_port = htons(0);
  if ((bind(server_socket,(struct sockaddr *)&server_addr, sock_size))  < 0) {
    perror("bind ");
    exit(1);
  }
  if (getsockname(server_socket, (struct sockaddr *)&server_addr, &sock_size)) {
     perror("getsockname ");
  }
 
  printf("%s:%i\n", server_info->h_name, ntohs(server_addr.sin_port));
Je laisse le système me trouver un port libre (en choisissant zéro) et je le récupère ensuite : ça marche toujours au premier coup
__________________
-
http://wsympho.free.fr
sympho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2006, 21h08   #5
Membre régulier
 
Avatar de horkets
 
Inscription : juillet 2005
Messages : 324
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 324
Points : 93
Points : 93
Ce qui n'allait pas , c'est que la création du socket et le bind() se trouvaient dans la boucle ....
Je les en ai sortis et tout fonctionne , je peux desormais me connecter plusieurs fois sans erreurs

merci
horkets est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h18.


 
 
 
 
Partenaires

Hébergement Web