Я использую Select для мониторинга событий в дескрипторах файлов.в бесконечном цикле я видел, что при каждом повторении вызывается FD_ZERO
, а затем все файловые дескрипторы присоединяются с FD_SET
.Все это каждый раз, когда начинается цикл.
while(TRUE)
{
//clear the socket set
FD_ZERO(&readfds);
//add master socket to set
FD_SET(master_socket, &readfds);
max_sd = master_socket;
//add child sockets to set
for ( i = 0 ; i < clients ; i++)
{
//socket descriptor
sd = client_socket[i];
FD_SET( sd , &readfds);
//highest file descriptor number, need it for the select
// function
if(sd > max_sd)
max_sd = sd;
}
//wait for an activity on one of the sockets , timeout is NULL ,
//so wait indefinitely
activity = select( max_sd + 1 , &readfds , NULL , NULL , NULL);
/*
... */
}
Мой вопрос: могу ли я сделать то же самое, не используя FD_SET
каждый раз, когда цикл повторяется.Я имею в виду использование FD_ZERO
и присоединение MASTER SOCKET
перед циклом, и если есть новый сокет, мы получаем его и используем FD_SET
и FD_CLR
, чтобы удалить его при отключении.Я пытался, но это приводит к тому, что программа получает только одно соединение с сокетом, после этого она больше не получает соединения