Código C:
Ver original
int main(void) { int Fin = 0; struct sockaddr_in cli_addr; int cli_size, n, i; int ms, cs, auxsock; /*Socket maestro, cliente y auxiliar*/ fd_set rfds; /*Conjunto de sockets para lectura*/ fd_set afds; /*Conjunto de sockets activos*/ FD_ZERO(&afds); ms = passiveTCP("echo", 5); if (ms == -1) Fin = 1; FD_SET(ms, &afds); while (Fin == 0) { if (select(FD_SETSIZE, &rfds, (fd_set*) 0, (fd_set*) 0, (struct timeval *) 0) == -1) { /*Error fatal: fin de programa*/ return -1; } if (FD_ISSET(ms, &rfds)) { /*Hay actividad sobre el socket maestro*/ cli_size = sizeof (cli_addr); cs = accept(ms, (struct sockaddr*) &cli_addr, &cli_size); if (cs != -1) FD_SET(cs, &afds); } /*Comprobamos si hay actividad sobre el resto de sockets*/ for (i = 0; i < rfds.fd_count; i++) { auxsock = rfds.fd_array[i]; if ((auxsock!ms) && (FD_ISSET(auxsock, &rfds))) { n =recv(auxsock, buff, sizeof (buff), 0); if ((n != SOCKET_ERROR) && (n > 0)) send(auxsock, buff, n, 0); if (n == 0) { close(auxsock); FD_CLR(auxsock, &afds); } } } } close(ms); return 0; }
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?