Sto usando la funzione di selezione per la comunicazione tra le mie prese. Ho un ciclo while e lo faccio -Perché FD_SET/FD_ZERO per select() all'interno 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);
e lo stesso con diverse variabili sul lato client. Ho preso questa tecnica di base da un tutorial online e ci sono andato. Poi mi ha colpito - perché cancellare il set e aggiungere i descrittori di file ogni volta che faccio un ciclo? Se sono già stati aggiunti, perché eliminarli e aggiungerli di nuovo? Quindi ho provato a farlo solo una volta e il codice non funziona più allo stesso modo. Qualcuno può spiegare perché? È solo perché selezionare modifica il contenuto del set? Qualsiasi aiuto e/o intuizione è apprezzato.
Ricordare inoltre che è necessario reimpostare la struttura temporale (waitd nell'esempio) ogni volta che si esegue un ciclo. –