
El detalle esta en que La memoria utilizada no deja de incrementar, empieza el programa usando sobre 400 KB y mientras mas preciono F5 en el navegardor WEB, (El miniservidor es WEB), enviando Multiples GET al servidor la memoria del programa incrementa y nunca decrementa, siendo que en cada ocasion he liberado el apuntador utilizado para leer la linea, y he cerrado el socket del cliente:
Codigo:
Código
#include<winsock2.h>
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>
#define BACKLOG 256
WSADATA *wsaData;
struct sockaddr_in *server_sa;
char *readLine(SOCKET descriptor,int *len);
int main() {
SOCKET s,c;
int b = 0,iResult;
int read_len;
char *linea;
char caracter;
iResult = WSAStartup(MAKEWORD(2,2), wsaData);
if (iResult != 0) {
return 1;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
return 2;
}
server_sa->sin_family = AF_INET;
server_sa->sin_port = htons(80);
server_sa->sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s,(struct sockaddr *) server_sa, sizeof(struct sockaddr)) < 0) {
return 3;
}
b = sizeof(struct sockaddr);
listen(s, BACKLOG);
while(1) {
if((c = accept(s,(struct sockaddr *)server_sa, &b)) < 0) {
return 4;
}
do{
linea = readLine(c,&read_len);
}while(read_len != 0);
close(c);
}
}
char *readLine(SOCKET descriptor,int *len) {
char *buffer = NULL;
int i = 0,entrar = 1,len_read;
do {
len_read = recv(descriptor,buffer + i,1,0);
if(len_read == 1){
switch(buffer[i]) {
case 0xD:
buffer[i] = '\0';
break;
case 0xA:
buffer[i] = '\0';
entrar = 0;
break;
default:
i++;
break;
}
}
else {
buffer[i] = '\0';
entrar = 0;
}
}while(entrar);
if(len != NULL){
len[0] = i;
}
return buffer;
}
El problema es que se espera que el servidor se lo mas liguero ligero posible y atienda millones de peticiones por segundo. Y no creo que el F5 del navegador supere mas de 100 peticiones por segundo.
Saludos


 
  




 Autor
 Autor
		





 En línea
									En línea
								







