Procesos en C

shortyStyle

Hola a todos, escribo porque estoy un poco desesperadete con el tema del título.. El caso es que a final de curso hemos tocado algo de procesos en c (linux) y yo no he podido ir casi a clase, y he aprendido bien el concepto y lo básico, me pidieron un trabajo en el que hiciera mediante sockets y procesos un pequeño chat y lo hice sin problemas, pero ahora me piden otro nuevo trabajito que me trae de cabeza, es el siguiente.

Me piden que haga un programa, que tenga una parte servidor y otra cliente (dependiendo de los parámetros que le pasemos o por un menu). Cuando un cliente se conecta el servidor le envia el contenido de un archivo de texto, el problema viene cuando me piden que tiene que ser posible que se conecten X clientes a la vez sin problemas. Esto último es lo que me deja descolocado, siempre he trabajado con sockets blocantes y en procesos no usamos semáforos, es más el pequeño chat que hice era muy sencillo, se dividía el proceso, el proceso padre hacía de servidor y enviaba mensajes y el proceso hijo hacía de cliente y se conectaba al servidor y recibia el mensaje, muy simple. Pero el hecho de que se puedan conectar X clientes a la vez me desconcierta..

No necesito un código perfecto, solo si alguien sabe una 'fácil' explicación o un pequeño pseudocódigo.

Muchísimas gracias por la ayuda.

LOc0

http://www.chuidiang.com/clinux/sockets/socketselect.php

Salu2 ;)

shortyStyle

Gracias por tu rápida respuesta loco, pero ese manual ya lo encontré (de esa misma página saque el manual para aprender procesos :p) y no es del todo lo que necesitaba, pero gracias por la ayuda ;)

Sacado de tu enlace:

Hay dos opciones posibles.

* Una opción es crear un nuevo proceso o hilo por cada cliente que llegue, más el proceso o hilo principal, pendiente de aceptar nuevos clientes. En esta página no vamos a tratar esta opción.[/i]
shortyStyle

Lo que no acabo de ver del todo es que si cada vez que se conecta un nuevo cliente, se tiene que crear un nuevo proceso? Si llegamos al caso que se conectan 100000 clientes, habrá que crear tantos procesos? Es lo único que se me pasa por la cabeza pero me parece que no esta bien..

LOc0

Hola. Como no especificaste en #1 si podías/querías usar multiproceso ó multihilo pues la función Select() me pareció lo más sencillo. Si quieres usar fork() -> http://www.allele.com.ar/storage_docs/pdfs/sock_fork.pdf

Salu2 ;)

PD: Si llegamos al caso que se conectan 100000 clientes

Pues sí, tendrías que crear todos esos procesos, pero yo tp me preocuparía para tu problema. (Fíjate que una web de la envergadura de MV tiene como mucho unos 1500 clientes conectados a la vez (que tp es a la vez, pero eso es otra historia))

shortyStyle

Gracias le voy a dar una hojeada a ese pdf!

Sobre los 1000000 clientes, siempre se exagera y se busca la situación más rebuscada jeje.

Thx de nuevo.

Sr_RoS

Si sabes lo que hace esto estas salvado

Main{
fork();
Main();
}
Khanser

Más bien seria del palo


INT main()
{
int a = fork();

if (a != 0) Main();


}


Usuarios habituales

  • Khanser
  • Sr_RoS
  • shortyStyle
  • LOc0