select()
retornará quando pelo menos um dos descritores de arquivo estiver pronto para leitura ou gravação, ou quando o tempo limite for atingido ou quando for interrompido por um sinal.
Isso significa que você terá que testar os conjuntos de descritores de arquivo fornecidos para select()
após determinar que pelo menos um descritor de arquivo está pronto para leitura ou gravação (os conjuntos são modificados por select()
).
Upon successful completion, the
pselect()
orselect()
function shall modify the objects pointed to by thereadfds
,writefds
, anderrorfds
arguments to indicate which file descriptors are ready for reading, ready for writing, or have an error condition pending, respectively, and shall return the total number of ready descriptors in all the output sets. For each file descriptor less thannfds
, the corresponding bit shall be set upon successful completion if it was set on input and the associated condition is true for that file descriptor.
(da documentação do POSIX em select()
)
Se você precisar que o descritor de arquivo seja aberto para leitura e gravação, será necessário executar um loop por select()
até que as duas condições sejam atendidas.