19-06-2016 15:06
Sería para detectar y corregir unos fallos.
Os dejo el código:
PD: Sería un servidor echo estándar concurrente con conexión.
PD2: no puedo regalar mucho, pero si me ofrezco a llevar el avatar que queráis durante 3 meses si me lo sacáis
Os dejo el código:
Código:
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#define LINELEN 80
#define QLEN 5
char *service = "37";     // El puerto bien conocido de echo es 7
void main (int argc, char *argv[])
{
     char buff[LINELEN];
     struct sockaddr_in serv_addr, cli_addr;
     int ms, ss, cli_size, nbuf;
     struct servent *pse,*ppe;       // struct protoent *ppe;
     switch (argc) {
        case 2:
           service = argv[1];
        case 1:
           break;
       default:
           fprintf (stderr, "Uso: %s [port]\n",argv[0]);
           exit (1);
      }
     memset((char *)&serv_addr,0,sizeof(serv_addr));
     serv_addr.sin_family= AF_INET;
     serv_addr.sin_addr.s_addr=INADDR_ANY;
     if (pse=getservbyname(service,"tcp"))
        serv_addr.sin_port=pse->s_port;
     else if ((serv_addr.sin_port=htons(atoi(service)))==0)
        errexit("Servicio desconocido\n");
     if ((ppe=getprotobyname("tcp"))==0)
        errexit("No encuentro el protocolo tcp\n");
     ms=socket(AF_INET,SOCK_STREAM,ppe->p_proto);
     if (bind(ms,&serv_addr,sizeof(serv_addr))<0)
       errexit("No puedo instalar el servidor\n");
     while(1) {
       if((ss=accept(ms,&cli_addr,&cli_size))<0)
            errexit("Error al aceptar nuevos clientes\n");
       if (fork())
            close(ms);
       else {
            close(ss);
            while ((nbuf=read(ms,buff,LINELEN))>0)
                   write(ms,buff,sizeof(buff));
                   close(ms);
                   exit(0);
              }
       }
}
PD: Sería un servidor echo estándar concurrente con conexión.
PD2: no puedo regalar mucho, pero si me ofrezco a llevar el avatar que queráis durante 3 meses si me lo sacáis