Article View: es.comp.os.linux.programacion
Article #16783Re: Problemillas con los sockets
From: Ignacio Arenaza
Date: Wed, 22 Mar 2000 00:00
Date: Wed, 22 Mar 2000 00:00
89 lines
3326 bytes
3326 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Asi es como lo haria yo (si, lo se, algunas cosas pueden parecer
raras, pero todo tiene su explicacion racional; sin embargo el margen
de este mensaje es demasiado estrecho para escribirla ;-)
<----> <----> <----> <----> <----> <----> <----> <----> <----> <---->
#include <netSystem.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
/*********************************************************
* Funci�n encargada de leer un m�ximo de 'max'
* caracteres del socket 'sfd' y guardarlos en 'buf'.
* Termina tambi�n cuando se encuentre un salto de
* l�nea. Indica el numero de caracteres despositados
* en 'buf' a traves de 'almacenados'.
*
* Devuelve 0 en caso de error y distinto de 0 si todo
* va bien.
**********************************************************/
int leer_linea (int sfd, char *buf, size_t max, size_t *almacenados)
{
unsigned int restantes;
int leidos;
/* Comprobar que no nos dan un buffer invalido */
assert ( NULL != buf);
/* Valore iniciales para todo el mundo ;-) */
restantes = max;
*almacenados = 0;
leidos = 0;
/* Y alla vamos..... */
while (restantes > 0) {
leidos = read (sfd, buf, 1);
if (leidos == -1) {
/* Aqui habria que ver el tipo de error producido, ya que
* puede ser EINTR o EAGAIN y deberiamos seguir leyendo, etc.
* Se deja como ejercicio para el lector ;-)
*/
printf ("ERROR. Al recibir desde el servidor");
return -1;
}
if (leidos > 0) {
restantes -= leidos;
*almacenados += leidos;
/* Leemos un solo caracter cada vez, luego la siguiente linea es
* segura.
*/
if ('\n' == *buf) {
break;
}
/* Avanzar para las siguientes lecturas */
buf += leidos;
}
}
/* Comprobar que no nos hemos salido del buffer y retornar */
assert (*almacenados <= max);
return (0);
}
<----> <----> <----> <----> <----> <----> <----> <----> <----> <---->
Saludos. I�aki.
- --
Get PGP/GPG Keys at http://personales.jet.es/inaki.arenaza/pgpkey.html
A proud member of GULA - http://gula.jet.es/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.0 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.4 and Gnu Privacy Guard
iD8DBQE42A1VZXLnGT1HLgcRAserAKCMtS1Wftj5PMaihDCOoNO8AafdaQCggygI
NYdAdtm2gqCXWaqh/e62t9A=
=Zc+G
-----END PGP SIGNATURE-----
Technical Details
Message-ID:
<87snxjc1p7.fsf@eb2ebu.ampr.org>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,58a23ab56d6ca5b2 X-Google-Attributes: gidf86c8,public From: Ignacio Arenaza <inaki.arenaza@jet.es> Subject: Re: Problemillas con los sockets Date: 2000/03/22 Message-ID: <87snxjc1p7.fsf@eb2ebu.ampr.org> X-Deja-AN: 600951964 Content-Transfer-Encoding: 8bit References: <38CFDF82.BD9CA6A3@mtgsystem.com> <38D0A222.8EA901FF@NOSPAM.inicia.es> <38D111BE.7DA15CCE@mtgsystem.com> <8asrra$i5d$3@simancas.uva.es> <38D20C42.93C42E02@mtgsystem.com> Organization: Servidor NNTP de eb2ebu.ampr.org Content-Type: text/plain; charset=iso-8859-1 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.3 Mime-Version: 1.0 Newsgroups: es.comp.os.linux.programacion