maitretarot-devel-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Maitretarot-devel-fr] sockets, serveurs, fork, POSIX...


From: Jeremie Koenig
Subject: Re: [Maitretarot-devel-fr] sockets, serveurs, fork, POSIX...
Date: Mon, 3 Feb 2003 18:02:41 +0100
User-agent: Mutt/1.5.3i

On Mon, Feb 03, 2003 at 04:34:31PM +0100, Yves Mettier wrote:
> J'ai un petit probleme technique pour realiser ce que je voudrais faire sur 
> le serveur
> maitretarot.
> L'idee est d'avoir un serveur (au sens large du terme) capable de gerer 
> plusieurs
> parties (qui se jouent en meme temps, les parties). Et d'avoir un process par 
> partie.
> Pour realiser cela, mon idee est que chaque client se connecte a un process, 
> le pere,
> decline son identite et ses intentions (le nick et ensuite 
> creer|participer|regarder une
> partie).
> 
> Le probleme consiste donc, une fois que le serveur sait les intentions du 
> client, a
> "transferer" la socket a un process fils. Lorsqu'il s'agit de creer la 
> partie, donc de
> transferer la socket lors du fork, je sais faire.
> Mais comment fait-on pour transferer une socket d'un process a un autre, 
> quand l'autre
> existe deja?
> 
> Ceci est un probleme independant du langage de programmation utilise, et si 
> quelqu'un
> connait une solution, ce serait cool qu'elle soit independante du langage 
> aussi :)
> 
> Si personne n'a de solution, et si je ne trouve pas, j'ai eventuellement une 
> solution de
> remplacement, un peu plus lourde, qui consiste a forker une fois que tout le 
> monde est
> connecte. Cela empeche des spectateurs de venir rejoindre une partie une fois 
> que le
> fork a ete fait. Enfin on peut le faire mais c'est lourd.

Salut,

Une solution (mais pas portable du tout) serait de faire un appel
clone() au lieu du fork() avec CLONE_FILES (voire la man) et de
communiquer entre processus par un pipe pour indiquer les fd des
nouvelles connexions pour tel ou tel process.

Ceci dit, une solution plus clean (amha...) pourrait etre de gerer
plusieur partie dans un seul processus, genre avec une liste de
structures "partie" independantes, le tout tournant autour d'un select()
qui ecouterait tous les sockets kifo.

PS: Oups, j'ai un vieux reply qui traine dans mon "postponed" depuis
quelques semainses ;) Promis, je le finis et je vous l'envoie ;)


-- 
Jeremie Koenig <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]