🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #13903

Re: Servidor.Compartir una variable entre hijo y padre.

#13903
From: Josep Ramon
Date: Fri, 29 Dec 2000 17:22
86 lines
3824 bytes
"Jose Manuel" <pik@latinmail.com> wrote:
>>He puesto lo que me has dicho para ver los bytes escritos, y vaya sorpresa,
>ya
>>que me dice que me dice "descriptor de fixhero erróneo", cosa que no
>entiendo
>
>
>Si te dice eso es por las siguientes causas:
>- El descriptor se refiere a un dispositivo no abierto (has abierto bien el
>socket??)
>- Intentas una operacion de lectura sobre un dispositivo abierto como solo
>escritura, y viceversa (En que modo estan abiertos los sockets??)
>- El valor del descriptor no pertenece a un rango valido de descriptores
>(Esto es que tuvieras en ptr[j] el valor 789652355 .. por ejemplo)
>
>Yo me inclino mas a pensar (si todo lo anterior esta bien) en la ultima
>opcion, es habitual tener valores "extraños" si no se manejan bien los
>arrays.
>
>El siguiente paso es comprobar el valor de ptr en cada llamada... algo asi:
>
>>         if (escritos<0)
>>         {
>>           // error
>             printf("\n [ERROR] Descriptor: %d Bytes escritos: %d\n",ptr[j],
>escritos);
>>           perror("Datos no escritos correctamente");
>>          }
>
>A ver si vamos "acorralando" el problema... 8-))
>
>Saludos.

Hola de nuevo José Manuel.
Ya he encontrado el problema; el problema es que al crear un hijo, este tiene
sus descriptores, y aunque el padre asigne más descriptores, solo le puedo
pasar el primero a cada hijo (no sé si me explico demasiado bien). Lo he hecho
de otra forma: creando un hijo que tiene los datos, i cuando tiene un dato a
enviar informa a los otros hijos (que son los que se ocupan de las conexiones
de los clientes) de que hay un dato; entonces los otros hijos recogen el dato
(que está compartido) i lo escirben en su correspondiente descriptor de socket
que nos da el accept(...) en el padre:

main(){
      ...
     /****** PADRE *****/
    fork(){

      proceso que se ocupa de generar información
    }
    ...
   while(1)  //Bucle de servicio
    ...  
  newsock=accept(...);
   fork(){
      ...
       /*hijo que se ocupa de la nueva conexión y que se entera de cuando el
       primer hijo manda algun dato, para luego enviarlo al cliente en
       cuestión*/
      ...
      write(newsock,dato,strlen(dato));
     }
    ...
  } //main


Lo que tengo que hacer es poner un semáforo entre el primer proceso que genera
los datos y los hijos que se ocupan de los clientes, para "avisar" de que hay
un dato, y eso si que lo llevo un poco verde aún. :)
  
  Saludos
Technical Details
Message-ID: <978109849.92338311@news.teleline.es>
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!newsfeed.online.be!newsfeeds.belnet.be!naxos.belnet.be!news.belnet.be!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mail
References: <977855016.1208025462@news.teleline.es> <92cjc2$6n9$1@talia.mad.ttd.net> <977939719.866450502@news.teleline.es> <92f7pb$jh5$1@talia.mad.ttd.net> <978025691.44623218@news.teleline.es> <92hr1d$6u1$1@talia.mad.ttd.net>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,530151add8193e08
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2000-12-29 09:17:38 PST
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!newsfeed.online.be!newsfeeds.belnet.be!naxos.belnet.be!news.belnet.be!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mail
X-Newsreader: kexpress 0.8.0
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Message-ID: <978109849.92338311@news.teleline.es>
References: <977855016.1208025462@news.teleline.es> <92cjc2$6n9$1@talia.mad.ttd.net> <977939719.866450502@news.teleline.es> <92f7pb$jh5$1@talia.mad.ttd.net> <978025691.44623218@news.teleline.es> <92hr1d$6u1$1@talia.mad.ttd.net>
Subject: Re: Servidor.Compartir una variable entre hijo y padre.
Newsgroups: es.comp.os.linux.programacion
From: Josep Ramon <jrNO_SPAMbenet@teleline.es>
Content-Transfer-Encoding: quoted-printable
Lines: 87
Date: Fri, 29 Dec 2000 17:22:06 GMT
NNTP-Posting-Host: 62.82.231.126
X-Complaints-To: newsmaster@company.com
X-Trace: telenews.teleline.es 978110526 62.82.231.126 (Fri, 29 Dec 2000 18:22:06 MET)
NNTP-Posting-Date: Fri, 29 Dec 2000 18:22:06 MET
Organization: Typhoon Authentication Testing Club