Serveur TCP utilisant inetd :
int main(int argc,char **argv)
{
char *url; /* Nom du fichier demande */
/* Ouverture de la session SYSLOG */
openlog(NOM_SERVEUR,LOG_PID,LOG_DAEMON);
syslog(LOG_INFO,"Traitement d'une requete");
/* Envoi eventuel du fichier demande */
url=requeteValide(stdin);
if(url!=NULL){
char *type=typeDeFichier(url);
printf("%s\nContent-Type: %s\n\n",REP_SUCCES,type);
envoiFichier(url,stdout);
syslog(LOG_INFO,"Succes, fichier %s envoye",url);
}
else{
printf("%s\n",REP_ERREUR);
syslog(LOG_INFO,"Echec, requete invalide ",url);
}
/* Fermeture de la session SYSLOG */
syslog(LOG_INFO,"Fin du traitement de la requete");
closelog();
exit(0);
}
Serveur UDP utilisant inetd :
int main(int argc,char **argv)
{
char tampon[MAX_TAMPON]; /* Stocke le message de la sonde */
int longueur; /* Longueur du message */
char reponse[MAX_TAMPON]; /* Stocke la reponse a la sonde */
struct sockaddr_in adresse; /* Adresse de socket de l'emetteur */
int taille=sizeof(adresse); /* Taille de cette adresse */
/* Ouverture de la session SYSLOG */
openlog(NOM_SERVEUR,LOG_PID,LOG_DAEMON);
syslog(LOG_INFO,"Traitement d'un paquet-sonde");
/* On retourne les donnees avec un prefixe */
longueur=recvfrom(0,tampon,MAX_TAMPON-1,0,&adresse,&taille);
tampon[longueur]='\0';
{ char *texte=inet_ntoa(adresse.sin_addr);
syslog(LOG_INFO,"Sonde en provenance de %s",texte); }
sprintf(reponse,"%s%s",ECHO_PREFIXE,tampon);
sendto(0,reponse,strlen(reponse),0,&adresse,taille);
/* Fermeture de la session SYSLOG */
syslog(LOG_INFO,"Fin du traitement");
closelog();
exit(0);
}