J'ai écrit un serveur à un seul thread en c sous linux, ce serveur est à l'écoute de plusieurs ports, le serveur est supposé recevoir des messages textes, J'utilise ce code pour écouter les sockets :
while(1){
FD_ZERO(&socks);
for (i = 0 ; i < IndexConnctedSocket ; i++ )
FD_SET(newSocketFds[i],&socks);
readsocks = select(highNewSocket + 1,&socks,(fd_set*) 0,
(fd_set*) 0 ,&timeout);
for (j = 0 ; j <= index ; j++ ){
if ( FD_ISSET(newSocketFds[j],&socks) != 0 ){
bzero(buffer, 2048);
n = read(newSocketFds[j], buffer, 2048);
if (n < 0)
error("ERROR reading from socket");
i = 0;
n = write(newSocketFds[j], "I got your message ",18);
if (n < 0)
error("ERROR writing to socket");
}
}
mais lorsque j'envoie des messages au serveur (via un client qui se connecte à toutes les sockets), certains messages sont perdus, et lorsque je me connecte au serveur à partir de différents clients, cela fonctionne parfaitement.