Previous Up Next

3  Pont virtuel

Il vous est proposé d’écrire un programme se comportant comme un serveur TCP. Il écoute sur un port donné et attend les connexions de clients.

Le programme se charge alors de transmettre les paquets entre les différents clients. Il est conseillé d’envoyer les paquets en deux étapes : envoyer d’abord la taille du paquet puis le paquet lui même.

Un soin particulier doit être apporté à la lecture des paquets, la primitive read ne permettant pas de spécifier un nombre minimum d’octets à lire. Vous pouvez utiliser une fonction comme celle proposée ci-dessous.

int read_fixed(int descripteur,unsigned char *array,int size){
int bytes=0;
while(bytes<size){
  int offset=read(descripteur,array+bytes,size-bytes);
  if(offset<=0) return -1; else bytes += offset;
  }
return bytes;
}

Pour arriver à écrire ce serveur TCP sans création de processus fils (ni même de processus légers) vous allez utiliser la primitive poll. Cette primitive permet d’écouter simultanément sur plusieurs descripteurs de fichiers ou de sockets pour attendre une activité sur l’un d’eux. Dans le cadre du pont virtuel vous écouterez simultanément sur la socket d’écoute et sur toutes les sockets de dialogue.


Previous Up Next