Dans une configuration serveur/client, j'ai un serveur qui se connecte à des clients sur une poignée (actuellement 4) de sockets différents. Pour l'instant, j'utilise select avec un set_size calculé, mais quelle est la limite supérieure, avant qu'il ne vaille la peine d'utiliser FD_SETSIZE à la place ?
Voici quelques exemples de code pour illustrer ce point. Tout d'abord, la construction de l'ensemble :
FD_ZERO(&set);
FD_SET(socket1, &set);
FD_SET(socket2, &set);
FD_SET(socket3, &set);
FD_SET(socket4, &set);
Voici comment est calculé le set_size :
set_size = MAX(socket1, socket2);
set_size = MAX(set_size, socket 3);
set_size = MAX(set_size, socket4);
set_size += 1;
Et l'usage :
while ((cnt = select(set_size, &set, NULL, NULL, &t)) != -1 || errno == EINTR) {
if (cnt > 0)
// Do different stuff depending what socket is active
else
// Keep everything alive and add the sockets to the set again
}
Récemment, j'ai dû ajouter deux nouvelles prises et il se peut que je doive en ajouter d'autres à l'avenir. Quand utiliseriez-vous FD_SETSIZE plutôt que le set_size calculé ?