En realidad, es muy específico de la plataforma en cuanto a cómo funciona.
si su funcionamiento en un sistema Linux en realidad no lo es a difícil, sin embargo, sólo hay que generar una copia de su proceso de uso de algo 'tenedor' como la siguiente haría el truco:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet.h>
#include <signal.h>
#include <unistd.h>
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_Address.sin_port = htons(1234);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);
signal(SIGCHLD, SIG_IGN);
while(1)
{
char ch;
printf("Server Waiting\n");
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len)
// Here's where we do the forking, if you've forked already then this will be the child running, if not then your still the parent task.
if(fork() == 0)
{
// Do what ever the child needs to do with the connected client
read(client_sockfd, &ch, 1);
sleep(5); // just for show :-)
ch++;
write(client_sockfd, &ch, 1);
close(client_sockfd);
exit(0);
}
else
{
// Parent code here, close and loop for next connection
close(client_sockfd);
}
}
}
Usted puede Tengo que jugar con ese código un poco. No estoy cerca de una caja de Linux en este momento para hacer una compilación de prueba, y la he tipeado de memoria.
Sin embargo, el uso de la horquilla es la forma estándar de hacerlo en C en un sistema basado en Linux/Unix.
En windows es una historia muy diferente, y una que no puedo recordar todo el código necesario (estoy acostumbrado a la codificación en C# en estos días) pero configurar el socket es prácticamente el mismo, excepto necesita usar la API 'Winsock' para una mejor compatibilidad.
Usted puede (creo que de todos modos) todavía utilizar sockets Berkley estándar en Windows pero está lleno de trampas y agujeros, para las ventanas del Winsock este es un buen lugar para empezar:
http://tangentsoft.net/wskfaq/
Por lo que yo También soy consciente de que si usas Winsock tiene cosas para ayudar con el desove y el cliente múltiple, yo personalmente, por lo general, solo hago girar un hilo separado y copio la conexión del socket a eso, luego vuelvo al lazo escuchando mi servidor
Si va a hacer algún tipo de conexión de linux, recomendaría la guía de Beejs aquí http://beej.us/guide/bgnet/ – mathematician1975
Gracias por la recomendación, ¿este libro explica o contiene algún tipo de evento controlado referencia de programación? – iNDicator
No está claro lo que está preguntando, pero podría comenzar leyendo, por ejemplo, la documentación de libevent. – Artefacto