s***@hotmail.com
2005-07-05 09:48:48 UTC
Estoy programando un servidor en C para UNIX que haga de "pasarela
mensajes" entre los clientes que toman servicio por un puerto y los que
que reciben servicio por un puerto distinto.
La cuestión es que para ello , creo dos procesos : uno que escucha
peticiones de clientes por el puerto A y otro que escucha por el
puerto B. En cada proceso, según se van solicitando conexiones se crea
un conjunto de descriptores de sockets que se van guardando y
chequeando para quedar a la escucha de la recepción de algún mensaje.
El problema es que en ambos procesos , los valores de los descriptores
coinciden , es decir, el cliente número 1 que solicita conexión por
el puerto A recibe el mismo valor de descriptor de socket que el primer
cliente que se conecta por el puerto B. De esta forma, si quiero
escribir en un socket, resulta que se recibe el mensaje en dos
clientes. Esto me supone un problema , porque no identifico de manera
única a los clientes de mi servidor.
Para crear cada proceso, utilizo forK() y en cada pid mando ejecutar
una función la cual realiza la apertura de sockets y la escuha de los
mismos. Creo que por el uso del fork() vienen los problemas,pero no he
sabido como hacerlo de otra forma.
Resumiendo: si alguien sabe como plantear la programación de un
servidor que atiende peticiones por dos puertos y que comunique los
clientes conectados a uno con los que reciben servicio por el otro, que
me eche una mano por fa.
Graaacias.
mensajes" entre los clientes que toman servicio por un puerto y los que
que reciben servicio por un puerto distinto.
La cuestión es que para ello , creo dos procesos : uno que escucha
peticiones de clientes por el puerto A y otro que escucha por el
puerto B. En cada proceso, según se van solicitando conexiones se crea
un conjunto de descriptores de sockets que se van guardando y
chequeando para quedar a la escucha de la recepción de algún mensaje.
El problema es que en ambos procesos , los valores de los descriptores
coinciden , es decir, el cliente número 1 que solicita conexión por
el puerto A recibe el mismo valor de descriptor de socket que el primer
cliente que se conecta por el puerto B. De esta forma, si quiero
escribir en un socket, resulta que se recibe el mensaje en dos
clientes. Esto me supone un problema , porque no identifico de manera
única a los clientes de mi servidor.
Para crear cada proceso, utilizo forK() y en cada pid mando ejecutar
una función la cual realiza la apertura de sockets y la escuha de los
mismos. Creo que por el uso del fork() vienen los problemas,pero no he
sabido como hacerlo de otra forma.
Resumiendo: si alguien sabe como plantear la programación de un
servidor que atiende peticiones por dos puertos y que comunique los
clientes conectados a uno con los que reciben servicio por el otro, que
me eche una mano por fa.
Graaacias.