33bits

Versión completa: ¿Alguien sabe de servidores echo? Y de C si es posible
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Sería para detectar y corregir unos fallos.

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 roto2cafe
¿C? Me está dando un dolor de cabeza con los punteros y las estructuras que no veas.

¿Si es concurrente no debería abrir un hilo por cada conexión?
Ni puta idea.

Esta parte la llevo mierda roto2cafe
Yo diría que es así. Apache que es el servidor de páginas web hace eso, por cada conexión que abre crea un hilo nuevo.

Siento no poder ayudarte con el código, pero yo de C ni puta idea, lo básico y dando gracias
Nada, hombre.

A ver si viene alguien que sepa más a fondo, sino pues nada.