bon j'ai intégré set sockopt. ca marche toujours qu'une seule fois apres delog et relog. je sais pas ce que j'ai mal fait.
 
si tu as le temps de mater un peu le code (regarde au niveau du bind) merci beaucoup
___________________________________________________________
 
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>  	// Gestion Fichier  
#include <malloc.h>  	// Fonctions mémoire
#include <stdlib.h>  	// Fonctions mémoire
 
// ---------------- DECLARATION FONCTIONS
void Serveur(void);  	// Le Serveur
void Erreur(char *);  // Erreur Fatale au Serveur
 
// ---------------- CONSTANTES + VARIABLES GLOBALES  
#define FICHIER  "source.txt" // Fichier Source
#define FICH_MAX_SIZE	10000	// Taille Maximum de Fichier  
#define PORT_SERVEUR	4000  // Numéro Port du Socket Serveur (1 à 65535)
 
int sock;    	// La Socket
struct sockaddr_in sinfo;    // Infos sur la Socket
int sinfosize;    	// Taille structure sinfo
FILE *fich;      // Pointeur fichier Source
void *on;
 
// *********
// main
// *********
int main()
{
 
 while(1) Serveur();	// Lancement du Serveur Jamais d'arrêt du Serveur
 return 0;  	//fin du programme (jamais atteind !)
}
 
 
 
// *********
// Serveur  
// *********
void Serveur(void)
{
 int Etat;    // Retour des commandes Socket
 int ServeurON;  	// false => Fin Serveur , true => Serveur en route
 char *buffer;  	// buffer memoire, va contenir le fichier
 int TailleFichier;  // Taille Fichier
 
 
// __________________________ CREATION SOCKET __________________________________________
 
 
 sock=socket(AF_INET,SOCK_STREAM,0);  // Tentative Creation Socket
 if (sock==-1)
 {
 fprintf(stderr,"-------------ERREUR------------ Creation Socket Impossible !\n" );  
 exit(0);
 }
 
 fprintf(stderr,"Socket crée ! --------- OK\n" );
 
 sinfo.sin_addr.s_addr = htonl(INADDR_ANY);  // @IP Socket = @IP Ordinateur
 sinfo.sin_family = AF_INET;    // Protocole internet  
 sinfo.sin_port = htons(PORT_SERVEUR);	// Port du Socket Serveur
 
 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); // pour réutiliser l'adresse pour un bind ulterieur
 
 
// ________________________________ BIND _______________________________________________
 
 
 Etat=bind(sock,(struct sockaddr *)&sinfo,sizeof(sinfo)); // Attache Socket  
 if (Etat==-1)
 {
 fprintf(stderr,"-----------ERREUR---------- Socket: Bind Impossible !\n" );  
 perror(bind);
 close(sock);
 exit(0);
 }
 
 fprintf(stderr,"Bind réussi ! -------- OK\n" );
 
// _____________________________ LISTEN ________________________________________________
 
 
 Etat=listen(sock,0);    	// Mise en écoute Socket
 if (Etat<0)
 {
 fprintf(stderr,"----------ERREUR----------- Socket: Ecoute Impossible !\n" );  
 close(sock);
 exit(0);
 }
 
 fprintf(stderr,"Mise en écoute ------- OK\n" );
 
 ServeurON=1;      	// Le Serveur à démarré
 
 fprintf(stderr,"ServeurON mis à %d\n",ServeurON);
 
 
// _______________________ RESERVATION BUFFER MEMOIRE __________________________________
 
 if ((buffer=(char *)malloc(FICH_MAX_SIZE))==NULL)
 {
 fprintf(stderr,"-----------ERREUR------------ Reservation Memoire Impossible !\n" );  
 close(sock);
 exit(0);
 }
 
 fprintf(stderr,"Réservation mémoire -------- OK\n" );
 
 
// ______________________________________  BOUCLE SERVEUR _________________________________________________
 
 
 while(ServeurON==1)    	// Boucle permanente tant que ServeurON=true
 {
 	sinfosize = sizeof(sinfo);  	// Taille Structure sinfo
   
// _____________________________ ACCEPT
 
 	if((sock=accept(sock,(struct sockaddr *)&sinfo,&sinfosize))!= -1)
 	{  
   // OK LE SERVEUR A ACCEPTE LA CONNECTION CLIENT
   fprintf(stderr,"CONNEXION ETABLIE ----------- OK\n" );
 
// ____________________________ FICHIER
 
   if ((fich=fopen(FICHIER,"rb" ))==NULL)
   {
   fprintf(stderr,"----------ERREUR------- Ouverture Fichier Impossible !\n" );
   close(sock);
   exit(0);
   }
   fprintf(stderr,"Fichier %s ouvert ----------- OK\n",FICHIER);
   
   TailleFichier=fread(buffer,1,FICH_MAX_SIZE,fich);	// Lecture dans FICHIER
   fprintf(stderr,"TailleFichier = %d\n",TailleFichier);
   
// ____________________________ SEND
 
   if (send(sock,buffer,TailleFichier,0)<0)
   {
   fprintf(stderr,"----------ERREUR-------- Erreur send transmission du Serveur !\n" );
   close(sock);
   exit(0);
   }
   fprintf(stderr,"SEND ------------ OK\n" );
 
   
// ___________________________ CLOSE
 
   fclose(fich);	// Fermeture Fichier
   ServeurON=-1;
   fprintf(stderr,"ServeurON = %d\n",ServeurON);
 
   
 	} else { fprintf(stderr,"--------ERREUR------- CONNEXION BAAAD, ACCEPT FOIREUX !!!\n" ); }
 }
 
// ________________________________________ FIN BOUCLE SERVEUR _________________________________________
 
 
 free(buffer);    // Libère mémoire
 sleep(1000);    // 1 secs d'attente => le client se deconnecte avant
 close(sock);  	// Fermeture Socket
 fprintf(stderr,"-------- FIN SERVEUR ---------" );
}