yifu / chess

Chess is attempt to write a chess client and server for online playing in c++. SDL is use on the client side for graphics.
0 stars 0 forks source link

Implementer un moteur reseau #20

Open yifu opened 9 years ago

yifu commented 9 years ago

Les appels a read ou write peuvent retourner prematurement. Il faut gerer ces cas? Signal hardware ou signal handler? Quoiqu'il en soit il vaut mieux gerer.

yifu commented 9 years ago

Ou peut etre meme mieux: utiliser send()/sendto()?

   If sendto() is used on a connection-mode (SOCK_STREAM,  SOCK_SEQPACKET)
   socket,  the arguments dest_addr and addrlen are ignored (and the error
   EISCONN may be returned when they are not NULL and 0),  and  the  error
   ENOTCONN  is returned when the socket was not actually connected.  Oth‐
   erwise, the address of the target is given by  dest_addr  with  addrlen
   specifying its size. 

Quoiqu'il en soit les messages sont suffisament petit pour tenir dans le buffer de socket. Il faudrait donc deconnecter cette socket car cela signifie que le remote peer est un 'slow consumer'. Que faire quand il y a congestion du buffer de l'interface de sortie? Ne faudrait-il pas stocker le pacquet en attendant? En fait... pourquoi stocker? Le buffer de socket est fait pour cela..

yifu commented 9 years ago

Question: utiliser un processus par utilisateur? Si oui, il faut un processus en amont pour effectuer le listen()/fork()/wait4().

Et probablement un autre processus en aval pour faire le matching de joueur. Autrement peut-on facilement distribuer l'algo de matching? Quoiqu'il en soit dans cette optique les socket UNIX seront utiles. Extrait de la page man unix:

Unix sockets support passing file descriptors or process credentials to other processes using ancillary data.