SELECT FD_SET
Fermé
RMEU
Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
10 novembre 2014
-
10 nov. 2014 à 14:10
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 11 nov. 2014 à 12:44
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 11 nov. 2014 à 12:44
A voir également:
- SELECT FD_SET
- Please select boot device ✓ - Forum Windows
- Reboot and select proper boot device ✓ - Forum PC portable
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum Windows 10
- Problème reboot and select proper boot device + clavier - Forum PC fixe
- Problème BIOS : Reboot and select proper boot device - Forum Windows
3 réponses
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
10 nov. 2014 à 20:55
10 nov. 2014 à 20:55
Bonsoir
Tu confonds pas mal de chose , et il me semble que tu n'as pas vraiment compris le rôle de la fonction
Avant tout , il faut savoir que la fonction
J'insiste sur ce points en précisons qu'il met en attente le processus mais ne le bloque pas pour faire un traitement et ensuite le débloqué .
Et c'est aussi là que réside véritablement le rôle de la fonction
En plus simple il ferme un service donnée parmi tant d'autres et cela définie son rôle dans la conception d'un serveur applicatif qui doit être en attente sur plusieurs sockets à la fois( mode multi-clients), il régule également l'ordre d'arrivée des requêtes cliente c'est lui l'abrite du système.
Bref sans rentrer en encore plus en profondeur voilà ce qu'il faut comprendre plus ou moins de la fonction
Quant à la fonction
Sans informations de
Et enfin pour répondre à ta question @RMEU: J'aimerais savoir si select bloque le process ou la thread dans laquelle il s'exécute.
à bientôt
Tu confonds pas mal de chose , et il me semble que tu n'as pas vraiment compris le rôle de la fonction
select()et du fameux
FD_SET()et surtout le rôle de la fonction
select()dans ta programmation réseaux.
Avant tout , il faut savoir que la fonction
select()ne fait que renvoyer le nombre de descripteur déjà prêt et par la même occasion, modifier l'ensemble des descripteurs pour en laisser que ceux qui sont véritablement prêts à être utilisé et par la même occasion , j'affirme qu'il y a mise en attente de processus par invocation de la macro
SELECT.
J'insiste sur ce points en précisons qu'il met en attente le processus mais ne le bloque pas pour faire un traitement et ensuite le débloqué .
Et c'est aussi là que réside véritablement le rôle de la fonction
select()le ou les processus en question ne peuvent sortir de leurs attentes à condition que la fonction
select()renvoie une valeur différente de nul et par la même occasion, cela veux dire que l'ensemble des éléments de départs contienne chacun des descripteurs qui sont prêts à être utilisé dans le cas contraire la fonction
selectferme automatiquement la socket en question mais pas le reste.
En plus simple il ferme un service donnée parmi tant d'autres et cela définie son rôle dans la conception d'un serveur applicatif qui doit être en attente sur plusieurs sockets à la fois( mode multi-clients), il régule également l'ordre d'arrivée des requêtes cliente c'est lui l'abrite du système.
Bref sans rentrer en encore plus en profondeur voilà ce qu'il faut comprendre plus ou moins de la fonction
select().
Quant à la fonction
FD_SET()elle ne fait qu'ajouter à la socket l'ensemble du descripteur en plus clair il lui fournit les informations nécessaires sur lequel il doit mettre le processus en attente (en gros il lui fournie une sorte de ID )
Sans informations de
FD_SETla fonction
selectfermera le service automatiquement.
Et enfin pour répondre à ta question @RMEU: J'aimerais savoir si select bloque le process ou la thread dans laquelle il s'exécute.
selectmet en attente une socket ou la ferme sans poser de question tout dépend de ta conception et tout fork</code> où <gras>thread sont exécutés après la fonction
accept()ou
recvfrom()mode multi-clients oblige.
à bientôt
RMEU
Messages postés
31
Date d'inscription
mercredi 10 avril 2013
Statut
Membre
Dernière intervention
10 novembre 2014
10 nov. 2014 à 21:26
10 nov. 2014 à 21:26
Bonsoir,
Merci pour ta réponse, mais tout cela je le savais déjà; désolé si mon texte n'est pas clair. Je veux juste savoir si l'appel à select bloque le process ou la thread dans laquelle il s'exécute. select ne peut se terminer que sur un timeout qui a été précisé lors de l'appel (voir syntaxe de sélect) ou être interrompu par un signal traité par un signal handler. Bien sur, sélect se termine quand un événement se produit sur un des sockets précisés dans un des 3 FD_SET (read, write exception) et bien d'accord avec toi, il retourne le nombre de sockets à examiner. Je pense que ma question principale : (process bloqué ou thread) reste valable.
Merci d'avance.
Merci pour ta réponse, mais tout cela je le savais déjà; désolé si mon texte n'est pas clair. Je veux juste savoir si l'appel à select bloque le process ou la thread dans laquelle il s'exécute. select ne peut se terminer que sur un timeout qui a été précisé lors de l'appel (voir syntaxe de sélect) ou être interrompu par un signal traité par un signal handler. Bien sur, sélect se termine quand un événement se produit sur un des sockets précisés dans un des 3 FD_SET (read, write exception) et bien d'accord avec toi, il retourne le nombre de sockets à examiner. Je pense que ma question principale : (process bloqué ou thread) reste valable.
Merci d'avance.
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
11 nov. 2014 à 12:44
11 nov. 2014 à 12:44
Bonjour
@RMEU :bloque le process ou la thread dans laquelle il s'exécute. select ne peut se terminer que sur un timeout qui a été précisé lors de l'appel (voir syntaxe de sélect) ou être interrompu par un signal traité par un signal handler.
Je pense que je n'ai pas été clair, que veux-tu dire par "processus qui l'exécute" pour moi d'après ce que je comprends, celui-ci est lancé dans un processus déjà exécuté et que tu souhaites savoir si celui-ci est bloqué ou pas ?
Si c'est le cas la réponse et non et je reviens sur ce que j'ai dit la fonction
Quant au timer ce n'est que pour dire au client il a X temps pour fournir une requête ou donner cas contraire la socket client est automatiquement fermer en plus clair (et tout depend du programme) si tu ne souhaiter pas attendre indéfiniment que quelqu'un t'envoi des data... il passe à autre choses voilà un peu son rôle et le programme continuera à fonctionner de plus la fonction
Donc, la fonction met en attente mais n'est pas bloquante pour d'autre sockets déjà actifs
contrairement à
Pour Conclure, ton processus fonctionnera mais à l'intérieur de celui-ci et la fonction
à bientôt
@RMEU :bloque le process ou la thread dans laquelle il s'exécute. select ne peut se terminer que sur un timeout qui a été précisé lors de l'appel (voir syntaxe de sélect) ou être interrompu par un signal traité par un signal handler.
Je pense que je n'ai pas été clair, que veux-tu dire par "processus qui l'exécute" pour moi d'après ce que je comprends, celui-ci est lancé dans un processus déjà exécuté et que tu souhaites savoir si celui-ci est bloqué ou pas ?
Si c'est le cas la réponse et non et je reviens sur ce que j'ai dit la fonction
selectsurveillent des ensembles de descripteurs et par la même occasion regarder s'il y a une nouvelle connexion en gros il ne bloque pas de processus dans lequel il est exécuté mais il met en attentes certaines descriptrices de la SOCKET.
Quant au timer ce n'est que pour dire au client il a X temps pour fournir une requête ou donner cas contraire la socket client est automatiquement fermer en plus clair (et tout depend du programme) si tu ne souhaiter pas attendre indéfiniment que quelqu'un t'envoi des data... il passe à autre choses voilà un peu son rôle et le programme continuera à fonctionner de plus la fonction
select()peut travailler sans timer il te suffit de passer nul et dès le premier descripteur actif il s'exécute cas contraire rien or close.
Donc, la fonction met en attente mais n'est pas bloquante pour d'autre sockets déjà actifs
contrairement à
accept()
Pour Conclure, ton processus fonctionnera mais à l'intérieur de celui-ci et la fonction
select()attendra un descripteur valide à un temps donné si tu la définis ou pas et continuera ou meurt par la suite peut importe. Et tous les processus que tu lanceras auront chacune une indépendance vis-à-vis des autres, les fonctions de select du processus 1 n'est pas la même que le processus 2
à bientôt