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

  FORUM HardWare.fr
  Programmation
  C

  Serveur avec socket Unix + Pointeur de fonctions (contexte memoire ?)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Serveur avec socket Unix + Pointeur de fonctions (contexte memoire ?)

n°1582963
Olivier51
Posté le 05-07-2007 à 18:31:55  profilanswer
 

Je voulais savoir si c'est possible sous Linux avec des sockets Unix (donc pour serveur / client sur la meme machine) si c'etait possible de faire ce genre de chose qui est possible avec MS Windows :
 
- on a un serveur avec une socket unix
- un client se connecte a cette socket
- faire une requete et recupere une structure composee de pointeur de fonctions
- ensuite le client fait appel au fonctions du serveur grace a ces fonctions qui appelle la memoire du serveur
 
Je reexplique pour etre j'espere un peu plus clair, lorsqu'on a un couple serveur/client avec un serveur qui propose diverses fonctionalites, on a souvent ce type de fonction sur le serveur pour dispatcher les operations :
switch(premier octet recu) {
case 0x01: mypush(); /* operation GET */ break;
case 0x02: mypop(); /* operation PUT */ break;
default: /* operation non reconnue */
}
 
Je sais que sous MS Windows, on peut avoir ce genre de chose, a la premiere requete du client on renvoie :
struct {
pfn_push : mypush;
pfn_pop : mypop;
};
Et ensuite du cote client je peux appeller pfn_push(), pfn_pop() et ces fonctions sont appellees dans le context memoire du serveur.
 
J'aimerais avoir quelque chose d'efficace donc pas de CORBA ou Webservices pour ce genre d'IPC, et eviter la memoire partagee. Je veux une maniere simple et efficace d'appeller des operations sur le serveur, c'est tout ...

mood
Publicité
Posté le 05-07-2007 à 18:31:55  profilanswer
 

n°1582992
matafan
Posté le 05-07-2007 à 20:25:27  profilanswer
 

Olivier51 a écrit :

struct {
pfn_push : mypush;
pfn_pop : mypop;
};


C'est quoi ce truc ? En tout cas c'est pas du C.
 
Pour ta question, non, ce n'est pas possible de faire ce que tu dis de la façon que tu proposes. La fonction du serveur est dans l'address space du server. Pour le client elle n'existe pas, ou, si elle existe, elle n'est pas forcément à la même adresse. Il y a bien une raison pour laquelle on a inventé des trucs compliqués dans le genre RPC, CORBA ou DCOP : parce qu'on ne peut peut pas faire ce genre de choses simplement.


Message édité par matafan le 05-07-2007 à 20:27:07
n°1583002
Olivier51
Posté le 05-07-2007 à 20:51:34  profilanswer
 

Non c'était pas du C, c'est du language abstrait, mais je pense que c'est assez clair pour dire ce que je voulais dire ...
 
Je ne connais que le XMLRPC et CORBA, mais la valeur ajoutée par rapport à ce que je voulais faire c'est que ces deux methodes ajoutent une couche d'abstraction et sont independants du language de programmation ...
 
Avant d'avoir lu ton message, je voulais m'auto-répondre, mais ta réponse confirme bien mes tests ...
 
Du coté serveur :

Citation :

== Client Dispatch (5) ==
res->fn_count: 0x805e514
== Client End (5) ==


 
Du coté client :

Citation :

fnc->fn_count: 0x805e514
 
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1213344064 (LWP 8165)]
0x0805e514 in ?? ()
(gdb) where
#0  0x0805e514 in ?? ()
#1  0x080489de in main () at ../client/client.cpp:101


 
Et je viens de faire la liaison avec MS Windows, le pourquoi du comment ça marche c'est que j'avais utilisé cette méthode en Kernel space pour des process en kernel space.


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

  Serveur avec socket Unix + Pointeur de fonctions (contexte memoire ?)

 

Sujets relatifs
[ Quasi-Résolu ] [socket] Effectuer deux echanges sans deconnexionprobleme d'adresse memoire qui rend fou
JAVA - Client/Serveur sous Eclipse (RMI ou Socket ?)C++ comment ouvrir et lire un fichier sur serveur distant ?
Batch Probleme Echo sur serveur distantAvoir la liste de toutes les fonctions PHP + plantage WAMP
Modifer les fonctions d'un popup[C] [WINSOCK] Socket connectée ?
Question sur les socket en JAVA 
Plus de sujets relatifs à : Serveur avec socket Unix + Pointeur de fonctions (contexte memoire ?)


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