Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Servidor TCP Echo con concurrencia aparente - Cuestiones

Estas en el tema de Servidor TCP Echo con concurrencia aparente - Cuestiones en el foro de C/C++ en Foros del Web. Buenas, se me ha proporcionado un código de un servidor TCP con concurrencia aparente del servicio echo. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original int main ...
  #1 (permalink)  
Antiguo 19/03/2011, 09:01
Avatar de Stoyicker  
Fecha de Ingreso: marzo-2011
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 1
Pregunta Servidor TCP Echo con concurrencia aparente - Cuestiones

Buenas, se me ha proporcionado un código de un servidor TCP con concurrencia aparente del servicio echo.

Código C:
Ver original
  1. int main(void) {
  2.     int Fin = 0;
  3.     struct sockaddr_in cli_addr;
  4.     int cli_size, n, i;
  5.     int ms, cs, auxsock; /*Socket maestro, cliente y auxiliar*/
  6.     fd_set rfds; /*Conjunto de sockets para lectura*/
  7.     fd_set afds; /*Conjunto de sockets activos*/
  8.  
  9.     FD_ZERO(&afds);
  10.  
  11.     ms = passiveTCP("echo", 5);
  12.     if (ms == -1) Fin = 1;
  13.     FD_SET(ms, &afds);
  14.  
  15.     while (Fin == 0) {
  16.         memcpy(&rfds, &afds, sizeof (rfds));
  17.         if (select(FD_SETSIZE, &rfds, (fd_set*) 0, (fd_set*) 0, (struct timeval *) 0) == -1) {
  18.           /*Error fatal: fin de programa*/
  19.             return -1;
  20.         }
  21.         if (FD_ISSET(ms, &rfds)) {
  22.             /*Hay actividad sobre el socket maestro*/
  23.             cli_size = sizeof (cli_addr);
  24.             cs = accept(ms, (struct sockaddr*) &cli_addr, &cli_size);
  25.             if (cs != -1)
  26.                 FD_SET(cs, &afds);
  27.         }
  28.         /*Comprobamos si hay actividad sobre el resto de sockets*/
  29.         for (i = 0; i < rfds.fd_count; i++) {
  30.             auxsock = rfds.fd_array[i];
  31.             if ((auxsock!ms) && (FD_ISSET(auxsock, &rfds))) {
  32.                 n =recv(auxsock, buff, sizeof (buff), 0);
  33.                 if ((n != SOCKET_ERROR) && (n > 0))
  34.                     send(auxsock, buff, n, 0);
  35.                 if (n == 0) {
  36.                     close(auxsock);
  37.                     FD_CLR(auxsock, &afds);
  38.                 }
  39.             }
  40.         }
  41.     }
  42.     close(ms);
  43.     return 0;
  44. }













Tengo las siguientes librerías incluidas:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>

Me gustaría saber:

1-¿Qué librería/s debo incluir para resolver los problemas con passiveTCP y SOCKET_ERROR?
2-¿Cómo declaro buff?
3-¿Qué debería haber en realidad donde dice rfds.fd_count y rfds.fd_array?
4-Supóngase que éste servidor no es de echo, sino que recibe una cadena de caracteres, y tiene que guardarla en un vector char[] (se sabe que la longitud máxima del mensaje es 10000 caracteres). ¿Cómo se haría?

Etiquetas: echo, servidor, tcp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:50.