🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Problemillas con los sockets

#16783
From: Ignacio Arenaza
Date: Wed, 22 Mar 2000 00:00
89 lines
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-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>

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