Bonjour, j'ai fait un programme serveur en c sous linux mais le programme s'arrete lorsque je ferme la console. Que puis je faire pour eviter qu'il s'arrête ? Il y a t-il quelque chose à intégrer ?
Le code se présente sous cette forme (le programme marche bien):
(le serveur traite les données de chaque clients connectés)
static void app(void)
{
SOCKET sock = init_connection();
char buffer[BUF_SIZE];
int actual = 0;
int max = sock;
Client clients[MAX_CLIENTS];
fd_set rdfs;
while(1)
{
int i = 0;
FD_ZERO(&rdfs);
FD_SET(STDIN_FILENO, &rdfs);
FD_SET(sock, &rdfs);
for(i = 0; i < actual; i++)
{
FD_SET(clients[i].sock, &rdfs);
}
if(select(max + 1, &rdfs, NULL, NULL, NULL) == -1)
{
perror("select()" );
exit(errno);
}
if(FD_ISSET(STDIN_FILENO, &rdfs))
{
break;
}
else if(FD_ISSET(sock, &rdfs))
{
SOCKADDR_IN csin = { 0 };
size_t sinsize = sizeof csin;
int csock = accept(sock, (SOCKADDR *)&csin, &sinsize);
if(csock == SOCKET_ERROR)
{
perror("accept()" );
continue;
}
if(read_client(csock, buffer) == -1)
{
continue;
}
max = csock > max ? csock : max;
FD_SET(csock, &rdfs);
Client c = { csock };
strncpy(c.name, buffer, BUF_SIZE - 1);
c.name[strlen(buffer)-1]=0;
if (accepter_client(c))
{
clients[actual] = c;
actual++;
write_client(c.sock,"connexion accepté\n" );
}
}
else
{
int i = 0;
for(i = 0; i < actual; i++)
{
if(FD_ISSET(clients[i].sock, &rdfs))
{
Client client = clients[i];
int c = read_client(clients[i].sock, buffer);
if(c == 0)
{
closesocket(clients[i].sock);
remove_client(clients, i, &actual);
strncpy(buffer, client.name, BUF_SIZE - 1);
strncat(buffer, " disconnected !", BUF_SIZE - strlen(buffer) - 1);
}
else
{
traiter_client(buffer);
}
break;
}
}
}
}
clear_clients(clients, actual);
end_connection(sock);
}