Implementación Servidor Concurrente (C)

Correspondiente a la clase del 08/09/2000 de Guido Macchi.
Se extiende el código base utilizado en la Implementación comunicación Cliente Servidor (C) para poder atender de manera concurrente a varios clientes.
Se utiliza el mismo cliente anterior, debiéndose ejecutar varias veces para notar el efecto. Vale mencionar que los clientes se deben ejecutar en un periodo breve de tiempo, sin esperar a que el primer clietne termine para comenzar la ejecución del segundo. Para esto bien se pueden usar varias consolas o bien se puede ejecutar con ./cliente & para que la ejecución pase a segundo plano e inmediatamente se pueda ejecutar otra instancia.
ServidorTCP-multi.c
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #define PORT 5000 /* Correspondiente a la clase del 08/09/2009 */ typedef struct sockaddr *sad; void error(char *s) { perror(s); exit(-1); } void handler (int sig) { wait(NULL); } int main () { int sock, sock1; struct sockaddr_in sin,sin1; socklen_t l; char buff[1024]; int cto; signal (SIGCHLD, handler); if ((sock=socket(PF_INET, SOCK_STREAM, ))<) error("socket"); sin.sin_family=AF_INET; sin.sin_port=htons(PORT); sin.sin_addr.s_addr=INADDR_ANY; if(bind(sock, (sad) &sin, sizeof sin) < ) error("bind"); if(listen(sock, 5) < ) error("hola"); for (;;) { l= sizeof(sin1); if ((sock1=accept(sock, (sad) &sin, &l)) < ) error("accept"); /* sin el siguiente if, no es multiproceso */ if (fork() == ) { printf("(%s, %d)\n", inet_ntoa(sin.sin_addr), ntohs(sin1.sin_port)); if ((cto=read(sock1, buff, sizeof buff)) < ) error("read"); buff[cto]=; { int i; for (i = ; i < cto; i++ ) buff[i] = toupper(buff[i]); } sleep(10); if (write (sock1, buff, cto) < ) error("write"); close(sock1); exit (); } close(sock1); } return ; }
Trackback URL for "Implementación Servidor Concurrente (C)"
http://www.odiolasllaves.com.ar/trackback/118
»
- Inicie sesión o regístrese para enviar comentarios

Gracias
Gracias profesor... me sirviò bastante su explicaciòn!.
Rafa para nada profesor, son
Rafa para nada profesor, son notas de las clases que fui tomando nomas
Error en el código
Por un comportamiento inesperado en el sistema que colorea el código, se omite el 0 en la comparación del fork(). En realidad debería decir if (fork() == 0).
Si editan el articulo, veran que esta correctamente escrito. Es solo una cuestión de visualización que espero poder corregir pronto. Si alguien conoce de este problema, se agradece una mano.