Estoy usando la función de selección para la comunicación entre mis enchufes. Tengo un ciclo while y lo hago -¿Por qué FD_SET/FD_ZERO para seleccionar() dentro del ciclo?
while(!done) {
FD_ZERO(&read_flags);
FD_ZERO(&write_flags);
FD_SET(comm_fd1, &read_flags);
FD_SET(comm_fd2, &read_flags);
FD_SET(STDIN_FILENO, &read_flags);
FD_SET(comm_fd1, &write_flags);
FD_SET(comm_fd2, &write_flags);
FD_SET(STDIN_FILENO, &write_flags);
//call select
sel = select(comm_fd1+comm_fd2+1, &read_flags, &write_flags, (fd_set*)0, &waitd);
y lo mismo con diferentes variables en el lado del cliente. Obtuve esta técnica básica de un tutorial en línea y simplemente fui con él. Entonces me di cuenta: ¿por qué borro el conjunto y agrego descriptores de archivo cada vez que bucleo? Si ya están agregados, ¿por qué borrarlos y volver a agregarlos? Así que intenté hacer esto solo una vez antes, y el código ya no funciona. ¿Alguien puede explicar por qué? ¿Es solo porque select modifica el contenido del conjunto? Cualquier ayuda y/o visión es apreciada.
También tenga en cuenta que debe restablecer la estructura timeval (espere en su ejemplo) cada vez que realice un ciclo. –