Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1188 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Linux C] socket serveur toujours présente quand on relance le prog

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Linux C] socket serveur toujours présente quand on relance le prog

n°382397
Larry99
Posté le 05-05-2003 à 10:34:39  profilanswer
 

J'ai une appli de Chat qui fait serveur et un client.
Tout se passe bien, ca marche.
Quand les clients s'en vont, le serveur peut fermer si on le désire et on peut le relancer juste après.
 
Mais, quand je ferme le serveur avant que les clients ne soient partis, je ne peux pas le relancer tout de suite, il faut que j'attende 2 min, sinon il me dit que le Bind est impossible, comme si la socket tournai toujours et écoutait le port.

mood
Publicité
Posté le 05-05-2003 à 10:34:39  profilanswer
 

n°382444
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 11:06:35  profilanswer
 

c'est normal, ca nous avait fait pareil qd pour l'iut on a fait un serveur HTTP, la seule solution si tu veux utiliser ton serveur c'est de changer de port a chaque redemarrage du serveur (t'en prends 2/3 et tu alternes, genre 1er fois sur 7000, apres le 7001 puis re 7000 etc....)

n°382486
Larry99
Posté le 05-05-2003 à 11:25:18  profilanswer
 

Ca fait un peu bourrin comme méthode, mais c vrai que c probablement ce que je vais faire ;) . C'est louche tout de même cette histoire, j'ai déjà fait la même chose sous windows et ca marche très bien, c pas possible qu'il y ai pas d'autres moyens. Mais bon... Merci a toi ! :)

n°382496
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 11:31:21  profilanswer
 

Larry99 a écrit :

Ca fait un peu bourrin comme méthode, mais c vrai que c probablement ce que je vais faire ;) . C'est louche tout de même cette histoire, j'ai déjà fait la même chose sous windows et ca marche très bien, c pas possible qu'il y ai pas d'autres moyens. Mais bon... Merci a toi ! :)


j'ai jamais essayé sous windows (notre serveur devait tourner sous unix :sweat:)
apres c'est vrai que c'est bourrin mais on rien trouvé d'autre comme solution, c'est surement du a linux qui attend un certain laps de temps avant de vraiment libérer la ressource....

n°382511
*syl*
--> []
Posté le 05-05-2003 à 11:38:47  profilanswer
 

Bizarre ce truc, tu fermes correctement ta socket au moins ?

n°382516
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 11:41:59  profilanswer
 

*Syl* a écrit :

Bizarre ce truc, tu fermes correctement ta socket au moins ?

nous on la fermait, c'est sur......

n°382523
theshockwa​ve
I work at a firm named Koslow
Posté le 05-05-2003 à 11:45:37  profilanswer
 

(prend un air dans le style de celui de ++Taz)
Linux ... :sarcastic:
(/air style ++Taz)
 
:whistle:


---------------
last.fm
n°382550
Jar Jar
Intaigriste
Posté le 05-05-2003 à 12:22:33  profilanswer
 

Il ne faut pas seulement fermer la socket, il faut également tuer toutes les connexions établies...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°382563
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 13:05:57  profilanswer
 

Jar Jar a écrit :

Il ne faut pas seulement fermer la socket, il faut également tuer toutes les connexions établies...

dans le cas de notre serveur http on fermait la connection apres l'envoi de la page, et on etait qd meme obligé de changer le port si on voulait redemarrer le serveur moins de 5 min avant de l'avoir fermé (le serveur hein, pas la connection  :o !)

n°382585
Taz
bisounours-codeur
Posté le 05-05-2003 à 13:31:22  profilanswer
 

theShOcKwAvE a écrit :

(prend un air dans le style de celui de ++Taz)
Linux ... :sarcastic:
(/air style ++Taz)
 
:whistle:

:D

mood
Publicité
Posté le 05-05-2003 à 13:31:22  profilanswer
 

n°382592
Jar Jar
Intaigriste
Posté le 05-05-2003 à 13:41:58  profilanswer
 

harrysauce a écrit :

dans le cas de notre serveur http on fermait la connection apres l'envoi de la page, et on etait qd meme obligé de changer le port si on voulait redemarrer le serveur moins de 5 min avant de l'avoir fermé (le serveur hein, pas la connection  :o !)

Y'a un problème dans ton code, c'est tout.
 
Éventuellement, cherche le code d'un serveur de n'importe quoi plutôt léger et regarde ce qui diffère au niveau de la fermeture du serveur.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°382648
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 14:12:29  profilanswer
 

Jar Jar a écrit :

Y'a un problème dans ton code, c'est tout.
 
Éventuellement, cherche le code d'un serveur de n'importe quoi plutôt léger et regarde ce qui diffère au niveau de la fermeture du serveur.


ohhhh
donc mon prof de reseau ET mon prof de systeme ont torts????
(d'apres eux c'est normal....) :sarcastic:

n°382781
gilou
Modérateur
Modzilla
Posté le 05-05-2003 à 15:07:53  profilanswer
 

harrysauce a écrit :


ohhhh
donc mon prof de reseau ET mon prof de systeme ont torts????
(d'apres eux c'est normal....) :sarcastic:  


La réponse c'est normal, non suivie d'explications du pourquoi, ca camoufle en general une ignorance.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°382840
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 15:23:25  profilanswer
 

gilou a écrit :


La réponse c'est normal, non suivie d'explications du pourquoi, ca camoufle en general une ignorance.
A+,


le prof de reseau n'a pas dit pourquoi (a partir du moment ou il y a de la prog il n'a jamais su donner grande explication)
 
et le prof de systeme nous avait dit pourquoi mais je dois avouer que je m'en souviens plus du tout :D :D :D


Message édité par harrysauce le 05-05-2003 à 15:23:57
n°382898
skeye
Posté le 05-05-2003 à 15:41:27  profilanswer
 

harrysauce a écrit :


le prof de reseau n'a pas dit pourquoi (a partir du moment ou il y a de la prog il n'a jamais su donner grande explication)
 
et le prof de systeme nous avait dit pourquoi mais je dois avouer que je m'en souviens plus du tout :D :D :D


Une autre bonne façon de camoufler l'ignorance est de sortir une explication assez complexe pour être sur :
1) que l'autre n'y comprend rien.
2) qu'il ne s'en souviendra donc pas (et ne risquera donc pas de divulguer l'ignorance si bien camouflée).

n°382901
lorill
Posté le 05-05-2003 à 15:42:05  profilanswer
 

skeye a écrit :


Une autre bonne façon de camoufler l'ignorance est de sortir une explication assez complexe pour être sur :
1) que l'autre n'y comprend rien.
2) qu'il ne s'en souviendra donc pas (et ne risquera donc pas de divulguer l'ignorance si bien camouflée).


serial coder :love:

n°382929
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 15:50:44  profilanswer
 

skeye a écrit :


Une autre bonne façon de camoufler l'ignorance est de sortir une explication assez complexe pour être sur :
1) que l'autre n'y comprend rien.
2) qu'il ne s'en souviendra donc pas (et ne risquera donc pas de divulguer l'ignorance si bien camouflée).


:lol:
nan, c'etait comprehensible son truc qd meme, et puis c'est pas le genre du prof de systeme.....plus du prof de resau (sauf que lui y camoufle pas grand chose :o)

n°383266
Jar Jar
Intaigriste
Posté le 05-05-2003 à 19:15:57  profilanswer
 

harrysauce a écrit :

ohhhh
donc mon prof de reseau ET mon prof de systeme ont torts????
(d'apres eux c'est normal....) :sarcastic:

Oui, et je le te le prouve quand tu veux, par exemple avec un serveur apache.
 
C'est complètement évident que si tu ne déconnectes pas les clients, le port va rester occupé. Mais si tu les jartes, un mars et ça repart.


Message édité par Jar Jar le 05-05-2003 à 19:17:11

---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°383275
Larry99
Posté le 05-05-2003 à 19:20:06  profilanswer
 

Salut, pour répondre, je ferme bien toutes les connexions qui étaient ouvertes : toutes les sockets crées par un accept sont fermées et puis enfin la socket d'écoute sur le port.
 
J'ai cherché de la doc justement pour voir si il fallait autre chose qu'un close(socket) pour fermer plus proprement le serveur, mais j'ai rien trouvé. Donc je reste sur mon impression de bizarre. C trop flou à mon goût.
 
De toute façon, je risque pas de poser la question a mes profs, ils viennent jamais et refusent de donner des réponses quand on leur envoie des mails.

n°383387
xWillow
Posté le 05-05-2003 à 21:03:55  profilanswer
 

4.2 Why don't my sockets close?
 
When you issue the close() system call, you are closing your interface to the socket, not the socket itself. It is up to the kernel to close the socket. Sometimes, for really technical reasons, the socket is kept alive for a few minutes after you close it. It is normal, for example for the socket to go into a TIME_WAIT state, on the server side, for a few minutes. People have reported ranges from 20 seconds to 4 minutes to me. The official standard says that it should be 4 minutes. On my Linux system it is about 2 minutes. This is explained in great detail in 2.7 Please explain the TIME_WAIT state..
 
( source : http://www.manualy.sk/sock-faq/uni [...] html#ss4.2 )

n°383440
harrysauce
Miaaaooou!
Posté le 05-05-2003 à 22:14:04  profilanswer
 

xWillow a écrit :

4.2 Why don't my sockets close?
 
When you issue the close() system call, you are closing your interface to the socket, not the socket itself. It is up to the kernel to close the socket. Sometimes, for really technical reasons, the socket is kept alive for a few minutes after you close it. It is normal, for example for the socket to go into a TIME_WAIT state, on the server side, for a few minutes. People have reported ranges from 20 seconds to 4 minutes to me. The official standard says that it should be 4 minutes. On my Linux system it is about 2 minutes. This is explained in great detail in 2.7 Please explain the TIME_WAIT state..
 
( source : http://www.manualy.sk/sock-faq/uni [...] html#ss4.2 )


:jap:
 
 
 
 
(et tu casses) [:sunny delight]

n°383444
gilou
Modérateur
Modzilla
Posté le 05-05-2003 à 22:18:16  profilanswer
 

xWillow a écrit :

4.2 Why don't my sockets close?
 
When you issue the close() system call, you are closing your interface to the socket, not the socket itself. It is up to the kernel to close the socket. Sometimes, for really technical reasons, the socket is kept alive for a few minutes after you close it. It is normal, for example for the socket to go into a TIME_WAIT state, on the server side, for a few minutes. People have reported ranges from 20 seconds to 4 minutes to me. The official standard says that it should be 4 minutes. On my Linux system it is about 2 minutes. This is explained in great detail in 2.7 Please explain the TIME_WAIT state..
 
( source : http://www.manualy.sk/sock-faq/uni [...] html#ss4.2 )


Ca au moins, ca a le merite d'etre clair. :jap:  
Sauf bien sur, le "for really technical reasons" qui pourrait etre détaillé :D
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1786805
hwoarangmy
Posté le 15-09-2008 à 10:17:14  profilanswer
 

Salut,
 
Je sais que ce topic est vieux mais je me suis posé la meme question et j'ai fini par trouver la reponse sur ce site :
http://www.ibm.com/developerworks/ [...] index.html
 
En gros, il suffit de faire :
int sock, ret, on;
struct sockaddr_in servaddr;
 
/* Create a new stream (TCP) socket */
sock = socket( AF_INET, SOCK_STREAM, 0 ):
 
/* Enable address reuse */
on = 1;
ret = setsockopt( sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
 
/* Allow connections to port 8080 from any available interface */
memset( &servaddr, 0, sizeof(servaddr) );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl( INADDR_ANY );
servaddr.sin_port = htons( 45000 );
 
/* Bind to the address (interface/port) */
ret = bind( sock, (struct sockaddr *)&servaddr, sizeof(servaddr) );
 
a+

n°1787196
Taz
bisounours-codeur
Posté le 15-09-2008 à 19:10:39  profilanswer
 

merci, ton t'avais attendu.

n°1787200
Profil sup​primé
Posté le 15-09-2008 à 19:15:15  answer
 

[:moule_bite]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Linux C] socket serveur toujours présente quand on relance le prog

 

Sujets relatifs
[Socket] plusieurs requetes dans une meme socket ?!En Javascript : Linux et Internet Explorer incompatibles??
[JAVA] Socket UDP et InputStream, probleme de readECMA script coté serveur : des tutoriaux ?
[Socket Linux] Qd le client ferme, le serveur boucle sur le message[opengl]probleme : mon prog qui li dans un .ase n'affiche rien !
[PHP] Script qui teste si un serveur est onlineComment transfomer un prog dos en prog windows??
Plus de sujets relatifs à : [Linux C] socket serveur toujours présente quand on relance le prog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR