/*
*/
#include #include #include
#include #include #include #include #include
void fin_hijo() {
wait(0);
printf("Un cliente menos\n");
signal(SIGCHLD,fin_hijo);
}
int main(int argc,char *argv[]) {
int sock,c_sock;
int puerto;
struct sockaddr_in servidor,cliente;
char buf[20000];
FILE *f;
signal(SIGCHLD,fin_hijo);
if (argc<=1) {
puerto=1234;
} else {
sscanf(argv[1],"%d",&puerto);
}
/* Abrimos el socket */
sock=socket(PF_INET,SOCK_STREAM,0);
/* Rellenamos la estructura para pedir puerto */
servidor.sin_family=AF_INET;
servidor.sin_port=htons(puerto);
servidor.sin_addr.s_addr=INADDR_ANY;
if (bind(sock,(struct sockaddr *)&servidor,sizeof(servidor))==-1) {
printf("Error!! no puedo coger el puerto!!!\n");
exit(-1);
}
listen(sock,5);
while (1) {
int dirlen=sizeof(cliente);
int leidos;
int pid;
c_sock=accept(sock,(struct sockaddr *)&cliente,&dirlen);
printf("Cliente en %x\n",ntohl(cliente.sin_addr.s_addr));
pid=fork();
if (pid==0) {
f = fdopen(c_sock,"w+");
while ( fgets(buf,20000,f) ) {
printf("retransmitiendo: %s",buf);
fprintf(f,"%s",buf);
}
fclose(f);
exit(0);
}
close(c_sock);
}
}
/*
*/