🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Problemillas con los sockets

#16840
From: Joaqu�n Cuenca Abela
Date: Mon, 20 Mar 2000 00:00
93 lines
3734 bytes
In article <87wvn01qge.fsf@eb2ebu.ampr.org>,
Ignacio Arenaza <inaki.arenaza@jet.es> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> >>>>> "Paco" == Paco Orts <webmaster@mtgsystem.com> writes:
>
> Paco> aqu� si hago un telnet nunca me pasa del if.
>
> Paco> Gonzalo Paniagua Javier wrote:
>
> >> MAnda el trozo de c�digo donde rellenas 'cadena_recibida'...
>
> No suelo decir aquello de "ya te lo habia dicho" pero ... ya te lo
> habia dicho ;-)
>
> La cadena que tu lees desde el socket no tiene el terminador ('\0') y
> por tanto strcmp sigue recorriendo la memoria mas alla del limite del
> buffer hasta que encuentra un '\0', y parece ser que antes de
> encontrarlo se sale del espacio de direcciones dando un bonito
> segmentation fault (seguro).
>
> Basicamente te tienes que encargar de a�adir el '\0' al final de tu
> cadena. Puedes emular a gets() y sustituir el '\n' por '\0' o puedes
> a�adirlo directamente detras del '\n' (segun tus necesidades). Yo
> personalmente optaria por la primera sulucion (emulacion de gets())
>
> Vamos, que cambiaria la linea:
>
> if (buffer[0] == '\n') break;
>
> por:
>
> if (buffer[0] == '\n'( {
> buffer[0] = '\0';
> break
> }

Igual me estoy perdiendo algo, pero...

1. Donde haces el cadena = (char *) malloc(...); ? (tienes que hacerlo
antes de llamar a leerLinea)

2. Cuanto espacio tiene reservado cadena? (no haces strncpy ni strncat,
asi que sin importar el espacio
que reserves hay tienes un potencial overflow).

3. Porque haces un strcpy (buf, "") ? (un simple buf[0] = '\0'; basta y
sobra).

4. La misma pregunta que te hace Ignacio, porque haces un malloc en
lugar de un char buf[2];?
Si fuese solo que sientes amor por los punteros (?), tampoco pasa nada
(excepto una pequenya
penalizacion en la velocidad), pero es que ademas estas olvidando hacer
un free (buf); (no tengo todo tu
codigo, y puede que me este perdiendo algo, si es asi mis disculpas,
pero si no parece que todavia
tienes algunos problemillas con los punteros... siempre que puedas
evitalos).

5. Estoy de acuerdo con Ignacio en que el problema parece ser que
olvidas el '\0' al final del buffer,
(o es eso, o es que estas olvidando un cadena = (char *) malloc (...)
antes de llamar a leerLinea...)
pero no estoy de acuerdo con la solucion.  Creo que la solucion es
cambiar la linea:

buffer[0] = ' ';

Por

buffer[1] = '\0';

Para que quieres un espacio en blanco en buffer[0]? (va a ser machacado
en la linea que
llama a read...)

Por lo demas, te aconsejo que aprendas a utilizar efence.

P.S.:  Si me estoy equivocando y sigues teniendo problemas, mandame un
email privado con el codigo completo (si puedes) y le echo un vistazo
con gdb, vale?

Un saludo!

--
Joaqu�n Cuenca Abela
e-mail: cuenca@ie2.u-psud.fr


Sent via Deja.com http://www.deja.com/
Before you buy.
Technical Details
Message-ID: <8b52ma$5gi$1@nnrp1.deja.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com> <87wvn01qge.fsf@eb2ebu.ampr.org>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,58a23ab56d6ca5b2
X-Google-Attributes: gidf86c8,public
From: Joaqu�n Cuenca Abela <e98cuenc@my-deja.com>
Subject: Re: Problemillas con los sockets
Date: 2000/03/20
Message-ID: <8b52ma$5gi$1@nnrp1.deja.com>
X-Deja-AN: 599891410
References: <38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com> <87wvn01qge.fsf@eb2ebu.ampr.org>
X-Http-Proxy: 1.0 x40.deja.com:80 (Squid/1.1.22) for client 193.55.28.182
Organization: Deja.com - Before you buy.
X-Article-Creation-Date: Mon Mar 20 11:39:55 2000 GMT
X-MyDeja-Info: XMYDJUIDe98cuenc
Newsgroups: es.comp.os.linux.programacion
X-Http-User-Agent: Mozilla/4.72 [en] (X11; I; Linux 2.2.12 i686)