Apéndice A. Más ejemplos de servidores HTTP
Este apéndice amplía el contenido de "Vencer el problema C10k" proporcionando más ejemplos de servidores HTTP. Estos ejemplos no son imprescindibles para comprender el Capítulo 5, pero puede que te resulten interesantes. Además, algunos de estos ejemplos se incluyen en los puntos de referencia.
Procedimiento fork() en lenguaje C
Intentaremos implementar un servidor HTTP concurrente utilizando C. Si estás familiarizado con C, el siguiente programa te resultará bastante sencillo. De lo contrario, no te preocupes, no estás obligado a entender todos los detalles, sólo la idea general. Al invocar fork() se hace una copia del proceso actual, de modo que de repente aparecen dos procesos en el sistema operativo: el original (padre) y un hijo. Este segundo proceso tiene exactamente las mismas variables y el mismo estado, la única diferencia es el valor del resultado de fork():
#include <signal.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <unistd.h>#include <stdio.h>intmain(intargc,char*argv[]){signal(SIGCHLD,SIG_IGN);structsockaddr_inserv_addr;bzero((char*)&serv_addr,sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr.s_addr=INADDR_ANY;serv_addr.sin_port=htons(8080);intserver_socket=socket(AF_INET,SOCK_STREAM,0);if(server_socket<0){perror("socket");exit(1);}if(bind(server_socket,(structsockaddr*)&serv_addr,sizeof(serv_addr))<0){perror("bind");exit ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access