Merci pour vos réponses, elles ont clarifié certaines choses
Merci pour vos réponses, elles ont clarifié certaines choses
bonjour
a titre d'info uniquement, avez vous un exemple d'un accept non bloquant
etape 1:etape 2: gestion des option
Code : Sélectionner tout - Visualiser dans une fenêtre à part sock = socket(PF_INET,SOCK_STREAM,0))
etape 3 : Configuration de l'adresse et du port
etape 4 :Configuration du nombre d'écoute
tout ca c ok
atepa 5 : accept connexion :cette fonction est bloquant ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part sock2 = accept(sock, NULL, 0))
alors j'ai voulu faire un select avant mais cela marche pas, en effet la valeur retournée apres le teimeout soit sock2 est 1230976571 quand il n'y a pas de connexion etablie.
Or la valeur renvoyée par accept est un nombre non négatif lors d'un succès, et -1 lors d'un échec. Donc il considere qu'il y a un client
????
merci de votre aide
ok je vais suivre ce conseil
et pour communiquer proprement entre thread : des pipes ?
cela va me faire un paquet de thread a gerer !!
ok ben je vais faire attention ; utilisation d'un bon vieux mutex (ou plusiers )
je n'utilisait pas pas le select avant, pas confronter a cette situation ...
En fait, voici un bref descriptif de mon exemple, j'ai une thread qui gère les connexion de clients sur deux ports, pour chaque nouveaux clients elle associe une nouvelle thread.
Le fait d'utiliser ce principe avec la thread relative a la gestion des connexion me simplifiait la vie mais fonction accept bloquante
Je ne vois pas où est le problème. Il est parfaitement logique que le thread principal du serveur soit bloqué sur accept(). C'est fait pour...
Pseudo-code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 thread_client(cli) { DO receive(cli.sock, data) ; blocant process (data) WHILE NOT cli.fin delete cli } thread_serveur() { DO new cli accept(cli) ; blocant create_thread(thread_client, cli) FOREVER }
ou je suis entierement d'accord pour un port mais si le serveur doit gérer plusieurs ports (A et B). le serveur va attendre une connexion sur la part A alors qu'un client va vouloir se connecter sur le port B. Sauf si on eclate le serveur en 2 thread : ca complique , non?
c'est pour cela que je voulais rendre accept non bloquante avec timer pour eviter qu'elle soit associable
Un accept() ne peut pas surveiller 2 ports. Il faut une instance du thread serveur par port (listen())...
Ben non, au contraire... 1 code, 2 instances...Sauf si on eclate le serveur en 2 thread : ca complique , non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 thread_serveur(srv) { listen(srv.port) DO new cli accept(cli) ; blocant create_thread(thread_client, cli) FOREVER }
Merci de votre aide, elle a été precieuse.
En ce qui me concerne, je pense avoir fait le tour de toutes mes interrogations.
Puis-je fermer cette discution, si il n'y a plus d'autres questions .... ???
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