int connexionServeur(char *hote,int port)
{
int df;
struct sockaddr_in adresse;
socklen_t taille=sizeof adresse;
int statut;
/* Creation d'une socket */
df=socket(PF_INET,SOCK_STREAM,0);
if(df<0){
perror("connexionServeur.socket");
exit(-1);
}
/* Connection de la socket a l'hote */
adresse.sin_family=AF_INET;
if(nomVersAdresse(hote,(void *)&adresse)<0) return -1;
adresse.sin_port=htons(port);
if(connect(df,(struct sockaddr *)&adresse,taille)<0) return(-1);
else return df;
}
int connexionServeur(char *hote,int port)
{
int df;
struct sockaddr_in6 adresse;
socklen_t taille=sizeof adresse;
int statut;
/* Creation d'une socket */
df=socket(PF_INET6,SOCK_STREAM,0);
if(df<0){
perror("connexionServeur.socket");
exit(-1);
}
/* Connection de la socket a l'hote */
adresse.sin6_family=AF_INET6;
if(nomVersAdresse(hote,(void *)&adresse)<0) return -1;
adresse.sin6_port=htons(port);
adresse.sin6_flowinfo=0;
adresse.sin6_scope_id=0;
if(connect(df,(struct sockaddr *)&adresse,taille)<0) return(-1);
else return df;
}
int main(int argc,char *argv[])
{
int s;
/* Lecture des arguments de la commande */
analyseArguments(argc,argv);
/* Connection au serveur */
s=connexionServeur(machine,port);
if(s<0){ fprintf(stderr,"Erreur de connexion au serveur\n"); exit(-1); }
/* Boucle de communication avec le serveur */
while(1){
char tampon[MAX_TAMPON];
fd_set ens_lecture;
int taille;
int statut;
FD_ZERO(&ens_lecture); FD_SET(0,&ens_lecture); FD_SET(s,&ens_lecture);
statut=select(s+1,&ens_lecture,NULL,NULL,NULL);
if(statut<0){perror("select"); exit(-1);}
if(FD_ISSET(0,&ens_lecture)){
if((taille=read(0,tampon,MAX_TAMPON))<=0) break;
if(write(s,tampon,taille)!=taille) break;
}
if(FD_ISSET(s,&ens_lecture)){
if((taille=read(s,tampon,MAX_TAMPON))<=0) break;
if(write(1,tampon,taille)!=taille) break;
}
}
}