% Preamble
\documentclass[a4paper,12pt]{article}

% Packages
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{eurosym}
\usepackage{epsfig}
\usepackage{stmaryrd}

% Title
\title{Pente : Echo Server}
\author{D.Moreaux}

% Document
\begin{document}
\maketitle
\section{Serveur TCP de base}
Un exemple de serveur de base (pour UNE connexion) peut être trouvé  au niveau du fichier Servertest.c.

Ce fichier propose plusieurs \verb|#define| pour permettre de tester différentes configurations. Dans le
cas présent, on désire que les deux options (REUSE et la requête Reverse DNS) soient effectuées.

D'autres adaptations seront nécessaires pour correspondre à ce qui est demandé.
\section{Select()}
Un exemple d'utilisation de la fonction \verb|select()| peut être trouvé dans l'analyse du code de
CircleMUD.

Pour utiliser la fonction \verb|select()|, il est nécessaire de créer un ou plusieurs FD\_SET. Ces derniers
sont modifiés par la fonction \verb|select()| et doivent dont être réinitialisés à chaque fois.

L'utilisation de \verb|select()| permet de travailler avec plusieurs sockets en même temps. Il sera dès lors
nécessaire de configurer ces derniers en non-bloquants.

On ignorera les signaux SIG\_PIPE afin d'éviter qu'une lecture/écriture sur un socket à moitié fermé
n'arrête le serveur.

Pour le moment la structure décrivant les connexions n'a besoin que du numéro de socket associé (et des
champs permettant de faire une liste liée).

Dans le cas présent, on peut utiliser le même \verb|select()| pour détecter les nouvelles connexions et
pour détecter les messages arrivant. De plus, il n'est pas nécessaire d'imposer un timeout sur ce
dernier vu que (contrairement à CircleMUD) l'on a pas besoin de gérer le temps (on peut rester en
attente jusqu'à ce que l'on reçoive quelque chose).

\section{Python}
Dans la section "liens", on peut trouver le lien vers la documentation de l'interface socket de Python.
On utilisera les fonctions \verb|send()| et \verb|recv()| pour l'envoi et la réception au lieu de
\verb|read()| et \verb|write()|.



\end{document}