/********************************* Autor: Agustín J. González http://www.elo.utfsm.cl/~agv **********************************/ #include #include #include #include int main(int argvc, char * argv[]) { char buf[20]; int s, n, ns, len; struct sockaddr_in name; printf("USO: %s \n", argv[0]); /* Crea un socket: punto de contacto entre aplicacion y capa transporte. */ s = socket(AF_INET, SOCK_STREAM, 0); /* Prepara estructura de datos para asociar el socket a un puerto. */ name.sin_family = AF_INET; name.sin_port = htons(atoi(argv[1])); name.sin_addr.s_addr = htonl(INADDR_ANY); /* en cualquier IP local.*/ /* Liga o asocia el socket al puerto deseado. */ len = sizeof(struct sockaddr_in); bind(s, (struct sockaddr *) &name, len); /* define cuantas conexiones pueden estar en proceso de aceptacion. */ listen(s, 4); /* Espera y acepta una conexion. Retorna un nuevo socket para atender a esa conexion */ ns = accept(s, (struct sockaddr *) &name, &len); /* Lee desde el socket y escribe en pantalla hasta * llegada de segmento con datos de largo cero. */ while ((n = recv(ns, buf, sizeof(buf), 0)) > 0) write(STDOUT_FILENO, buf, n); close(ns); close(s); exit(0); }