Article View: es.comp.os.linux.programacion
Article #13903Re: Servidor.Compartir una variable entre hijo y padre.
From: Josep Ramon
Date: Fri, 29 Dec 2000 17:22
Date: Fri, 29 Dec 2000 17:22
86 lines
3824 bytes
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-mailReferences:
<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