Forum Programmation.c Plugins

Posté par  .
Étiquettes : aucune
0
11
août
2004
Bonjour à tous,
Toujours dans le cadre du développement de mon petit serveur, je suis amené à utiliser des plugins (pour lui permettre d'utiliser plusieurs protocoles simultanément). J'ouvre donc le plugin avec dlopen(), puis je cherche le symbole de la fonction ProtoIni() qui retourne un tableau contenant des pointeurs vers les fonctions du plugin. Et là, je me pose une question existentielle : est-ce que ces pointeurs restent valides après un dlclose() ? Sont-ils même encore valides quand je les reçois ?

En fait, voici un petit schéma du fonctionnement de tout ceci :

[Main]
[_ Charge une table de fonctions composée d'une collection de pointeurs sur fonction et d'une table de correspondance requête/fonction (ProtoIni()).
|_ Lance le thread serveur en lui passant la table de fonctions.

[Serveur]
|_ Emballe les requêtes reçues dans une structure contenant un pointeur vers la table de fonctions, la requête, et le socket à qui renvoyer une réponse.
|_ Passe tout ce petit paquet à un thread interpreteur...

[Interpreteur]
|_ Recherche la requête dans la table, et lance la fonction appropriée.
|_ Renvoie une requête via le socket fourni si la fonction appelée en retourne une.

Soyez indulgents pour l'architecture un peu foireuse, je viens juste de finir ma première année d'IUT...

Merci d'avance pour votre aide.
  • # mouais

    Posté par  . Évalué à 1.

    En fait la première question est stupide, si je décharge la lib avec dlclose() les pointeurs ne risquent pas d'être valides. Par contre, est-ce que le coup de passer tous ces pointeurs au programme principal marchera ?
    • [^] # Re: mouais

      Posté par  (site web personnel) . Évalué à 3.

      Alors oui ca marche tes histoires, mais attention aux espaces de nom si tu utilise plusieurs plugins en meme temps (ex: prefixer tout symbole exporté du nom du plugin).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.